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

Sas*_*sha 29 mysql database-design

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

基本上,用户将能够以DD/MM格式保存重要日期,这些日期将被提醒.

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

Ric*_*iwi 49

我必须在数据库中存储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
Run Code Online (Sandbox Code Playgroud)


Clo*_*boy 6

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

01/02变成了2012-02-01,04\07变成了2011-07-04

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


sha*_*mar 5

如果您真的想删除年份,那么只需制作两列,一列代表日期,另一列代表月份。然后将它们分开存放。

CREATE TABLE `table-name` (
  `Day` tinyint NOT NULL,
  `Month` tinyint NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

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