4

我有一个日期输入。格式为YYYY-MM-DD. 但是,MMDD是可选的。以下所有内容构成预期格式:

  • 2012-10-13
  • 2012-09
  • 2010

我需要将这些数据存储在 MySQL 数据库中。它将同时用于:显示日期和过滤(查询)结果。

这样做的方法是什么?

4

3 回答 3

3

只需将月/日设置00DATETIME列。例如:

2012-04-06
2012-04-00
2012-00-00

DATETIME所有这些示例在列中都是完全有效的。作为工作证明,我们(我工作的公司)使用它来为我们的网站指定书籍的出版日期。我们目前使用的是 MySQL 5.1.54。

注意:根据用于格式化日期的语言(如果有),您可能需要根据是否提供日/月来对它们进行不同的格式化。例如,在 PHP 中,我需要检查是否提供了日期,并手动将最后的“-00”更改为“-01”,然后适当地格式化日期(在最终结果中省略日期)。

来自手册(来源

感谢@jon 追踪此事:

MySQL 允许您将日期或月份和日期为零的日期存储在DATEorDATETIME中。这对于需要存储您可能不知道确切日期的生日的应用程序非常有用。在这种情况下,您只需将日期存储为 '2009-00-00' 或 '2009-01-00'。如果您存储此类日期,则不应期望为需要完整日期的 DATE_SUB() 或 DATE_ADD() 等函数获得正确的结果。要禁止日期中的零月或零日部分,请启用 NO_ZERO_IN_DATE SQL 模式。

于 2012-04-06T13:30:11.860 回答
1

您可以将年、月和日存储在单独的列中,并将它们组合起来进行显示。对于某些查询,您可能不需要将它们组合起来,例如搜索一年。

于 2012-04-06T13:22:04.557 回答
0

保存在mysql的varchar (10 ) NOT NULL列中

当您检索数据时使用 mysql 函数STR_TO_DATE()DATE_FORMAT()

Reference

于 2012-04-06T13:13:45.510 回答