存储在许多情况下可能只知道年份的日期值的最佳方法是什么?
MySQL 允许在日期部分中使用零,除非启用 NO_ZEROES_IN_DATE sql 模式,默认情况下不启用。是否有任何理由不使用日期字段,如果月份和日期可能为零,或者将其拆分为年、月和日的 3 个不同字段(年(4)、tinyint、tinyint)?
更好的方法是将日期拆分为 3 个字段。年月日。这为您提供了存储、排序和搜索的完全灵活性。
此外,在必要时将这些字段重新组合成一个真实的日期字段非常简单。
最后,它可以跨 DBMS 移植。我认为没有其他人支持将 0 作为日期值的有效部分。
除非跨 DBMS 的可移植性很重要,否则我肯定会倾向于使用单个日期字段。如果您甚至需要中等复杂的与日期相关的查询,将日、月和年的值放在不同的字段中将成为一件苦差事。
MySQL 有丰富的日期相关函数 - http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html。如果您只想返回年份值,请使用 YEAR(yourdatefield),如果您想将其包含在查询的 WHERE 子句中,请使用相同的值。
您可以在 Mysql 中使用单个日期字段来执行此操作。在下面的示例中,字段具有日期数据类型。
mysql> select * from test;
+------------+------+
| field | id |
+------------+------+
| 2007-00-00 | 1 |
+------------+------+
1 row in set (0.00 sec)
mysql> select * from test where YEAR(field) = 2007;
+------------+------+
| field | id |
+------------+------+
| 2007-00-00 | 1 |
+------------+------+
我会使用一个字段,它会使查询更容易。
你可以试试 LIKE 操作员。如:SELECT * FROM table WHERE date_feield LIKE 2009;
这取决于您如何使用结果数据。一个简单的答案是简单地存储那些只有年份被称为 1 月 1 日的日期。这种方法非常简单,允许您使用所有标准的内置日期函数按年份聚合。
如果月份或日期很重要,就会出现问题。例如,如果您尝试以天、周、月为单位确定记录的年龄,或者如果您想显示这个较小粒度级别的分布。但是,这个问题无论如何都存在。如果您有一些完整的日期和一些只有一年的日期,那么在这种情况下您希望如何表示它们。