我有一个日期输入。格式为YYYY-MM-DD
. 但是,MM
和DD
是可选的。以下所有内容构成预期格式:
- 2012-10-13
- 2012-09
- 2010
我需要将这些数据存储在 MySQL 数据库中。它将同时用于:显示日期和过滤(查询)结果。
这样做的方法是什么?
我有一个日期输入。格式为YYYY-MM-DD
. 但是,MM
和DD
是可选的。以下所有内容构成预期格式:
我需要将这些数据存储在 MySQL 数据库中。它将同时用于:显示日期和过滤(查询)结果。
这样做的方法是什么?
只需将月/日设置00
为DATETIME
列。例如:
2012-04-06
2012-04-00
2012-00-00
DATETIME
所有这些示例在列中都是完全有效的。作为工作证明,我们(我工作的公司)使用它来为我们的网站指定书籍的出版日期。我们目前使用的是 MySQL 5.1.54。
注意:根据用于格式化日期的语言(如果有),您可能需要根据是否提供日/月来对它们进行不同的格式化。例如,在 PHP 中,我需要检查是否提供了日期,并手动将最后的“-00”更改为“-01”,然后适当地格式化日期(在最终结果中省略日期)。
感谢@jon 追踪此事:
MySQL 允许您将日期或月份和日期为零的日期存储在
DATE
orDATETIME
列中。这对于需要存储您可能不知道确切日期的生日的应用程序非常有用。在这种情况下,您只需将日期存储为 '2009-00-00' 或 '2009-01-00'。如果您存储此类日期,则不应期望为需要完整日期的 DATE_SUB() 或 DATE_ADD() 等函数获得正确的结果。要禁止日期中的零月或零日部分,请启用 NO_ZERO_IN_DATE SQL 模式。
您可以将年、月和日存储在单独的列中,并将它们组合起来进行显示。对于某些查询,您可能不需要将它们组合起来,例如搜索一年。