我在确定在数据库中存储某些数据的最佳方法时遇到了麻烦。我必须在数据库中存储DD / MM日期,但我不确定存储它的最佳方式,以便可以轻松地对其进行排序和搜索。
基本上,用户可以使用DD / MM格式保存重要日期,这些日期将提醒他们更接近当天。
DATE数据类型似乎并不完全合适,因为它包含年份,但我想不出存储此数据的另一种方式。可以在特定年份包括特定年份,但这几乎看起来不对。
答案 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-01
,04\07
变为2011-07-04
内置日期/时间功能非常实用,我强烈建议您不使用varchars
或tinyints
。
答案 2 :(得分:2)
如果你真的想要放弃这一年,那么只需要制作两个列,一个是白天,另一个是月。然后分开存放。
CREATE TABLE `table-name` (
`Day` tinyint NOT NULL,
`Month` tinyint NOT NULL
);
但是,最好只使用Date
类型,然后忽略代码中的年份。