用户可能不知道所有信息的日期的SQL日期模式

时间:2009-03-05 09:31:24

标签: sql design-patterns date null

您的系统允许新用户注册并输入他们的结婚日期。作为一个纯粹主义者,我想把它作为约会存储。在用户访谈之后,很明显现实与此方法不同。用户通常不确定当天或月份,并希望存储部分日期,因此“2009年6月”或“2012年的某个时间”。

有没有人知道一个好的设计模式,允许存储部分日期,然后尝试为重要日子创建时间表 - 即使输入了部分日期?

5 个答案:

答案 0 :(得分:3)

您可以将其存储为具有日期和日期之前列的范围。

答案 1 :(得分:2)

您始终可以将日期存储在不同的列中:

  • 天的日

让它们都可以为空。您可以添加用于存储计算的全部时间的列。对于该计算时间,您对所有为空的列使用一些默认值。

答案 2 :(得分:2)

也许是一个“模糊”的约会。如果他们说“2009年6月”,可以存储为2009年6月15日,差异为+/- 15天。

“2010年的某个时间”将于2010年7月1日,差异为180天。

所以存储日期和#天。

如果/如何在实践中发挥作用我不知道。只是一个想法。日期范围可能更容易实现。

答案 3 :(得分:1)

您可以将日期存储为YYYYMMDD,将未知的月/天设置为0.例如,20090200将是“2009年2月的某一天”。这将使您可以相对轻松地进行排序和比较,如果您需要将其转换为日期,您可以在月份或日期添加1以获得更高级日期比较的近似值。

答案 4 :(得分:1)

我有类似日期的问题;还有一些人也想说“6月15日”而没有指明年份。这是一个你必须处理的案例吗?

我将日,月和年存储在数据库中的三个单独的列中,每个列都可以为空,然后(稍微)重新发明了我的应用程序中的轮子(以及不允许某些情况,例如人们说“The 15th” 1974年“)。

但是,当我将所有日期处理逻辑放在我的应用程序中时,我从未单独访问过三列。事后我希望我把它们放在一个列中,将部分日期保存为字符串(类似“19740615”,“1974 ----”,“---- 0615”等),这样我就是d具有较少的列杂乱。

我想这取决于你想在数据库中做多少以及你想在应用程序中做多少。无论哪种方式,我认为你会发明一种略有不同形状的轮子。但是,当然,你已经足够好,可以制作一些整洁,封装,可重复使用的课程 - 这将使它变得有趣! : - )