存储只知年份的日期

时间:2009-01-06 15:34:52

标签: mysql schema

存储日期值的最佳方法是什么?在许多情况下,只知道年份?

除非启用NO_ZEROES_IN_DATE sql模式,否则MySQL允许在日期部分中使用零,默认情况下不是这样。是否有任何理由不使用日期字段,如果月份和日期可能为零,或者将其分为3个不同的字段,分别为年,月和日(年(4),tinyint,tinyint)?

5 个答案:

答案 0 :(得分:2)

更好的方法是将日期拆分为3个字段。年月日。这为您提供了存储,排序和搜索的完全灵活性。

此外,在必要时将字段重新组合到一个真实的日期字段中是非常简单的。

最后,它可以跨DBMS移植。我认为其他任何人都不支持0作为日期值的有效部分。

答案 1 :(得分:2)

除非跨DBMS的可移植性很重要,否则我肯定倾向于使用单个日期字段。如果您甚至需要中等复杂的日期相关查询,那么在单独的字段中显示您的日,月和年值将成为一件苦差事。

MySQL具有丰富的与日期相关的功能 - http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html 。如果要仅返回年份值,请使用YEAR(yourdatefield);如果要将其包含在查询的WHERE子句中,则使用相同的值。

答案 2 :(得分:0)

您可以在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 | 
+------------+------+

我会使用一个字段来简化查询。

是的,使用Date and Time functions会更好。 谢谢BrynJ

答案 3 :(得分:0)

你可以尝试一个LIKE操作员。如: SELECT * FROM table WHERE date_feield LIKE 2009;

答案 4 :(得分:0)

这取决于您如何使用结果数据。一个简单的答案就是简单地存储只有年份被称为1月1日的日期。这种方法非常简单,允许您使用所有标准的内置日期函数按年汇总。

如果月份或日期很重要,则会出现问题。例如,如果您尝试以天,周,月为单位确定记录的年龄,或者是否要在较小的粒度级别上显示分布。但是,这个问题无论如何都存在。如果你有一些完整的日期,有些只有一年,那么你想在这种情况下代表它们。