存储日期和月份(不含年份)

时间:2011-02-14 23:18:28

标签: mysql database-design

我在确定在数据库中存储某些数据的最佳方法时遇到了麻烦。我必须在数据库中存储DD / MM日期,但我不确定存储它的最佳方式,以便可以轻松地对其进行排序和搜索。

基本上,用户可以使用DD / MM格式保存重要日期,这些日期将提醒他们更接近当天。

DATE数据类型似乎并不完全合适,因为它包含年份,但我想不出存储此数据的另一种方式。可以在特定年份包括特定年份,但这几乎看起来不对。

3 个答案:

答案 0 :(得分:45)

  

我必须在数据库中存储DD / MM日期,但我不确定存储它的最佳方式,以便可以轻松地对其进行排序和搜索。

存储日期数据的最佳方式是,即使年份组件不是必需的,也就是使用日期。当您需要使用它时,您可以删除年份,或将其替换为与(或当前年份)进行比较的年份。

将其置于日期列中有助于正确排序,完整性,验证等。

为了迎合闰年,使用'0004'这一年允许'0004-02-29'。使用第4年使它比第0年略微复杂,但作为一个例子,这将日期'29 -Feb'(年不可知)变为今年的日期,以便与其他领域进行比较

select
    adddate(
    subdate(cast('0004-02-29' as date),
        interval 4 year),
        interval year(curdate()) year)

result: 2011-02-28

答案 1 :(得分:6)

这些日期是否经常发生?如果没有,您将如何跟踪何时“已过期”?如果答案是“应用会在过期后手动删除日期”,那么为什么不将DD/MM日期存储为该日期的下一个可用实例?例如:

01/02变为2012-02-0104\07变为2011-07-04

内置日期/时间功能非常实用,我强烈建议您使用varcharstinyints

答案 2 :(得分:2)

如果你真的想要放弃这一年,那么只需要制作两个列,一个是白天,另一个是月。然后分开存放。

CREATE TABLE `table-name` (
  `Day` tinyint NOT NULL,
  `Month` tinyint NOT NULL
);

但是,最好只使用Date类型,然后忽略代码中的年份。