【问题标题】:SQL Date pattern for dates that user may not know all the information用户可能不知道所有信息的日期的 SQL 日期模式
【发布时间】:2010-10-11 11:24:42
【问题描述】:

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

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

【问题讨论】:

    标签: sql design-patterns date null


    【解决方案1】:

    您始终可以将日期存储在单独的列中:

    • 月份中的某天

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

    【讨论】:

    • 酷 - 现在我如何利用这些列来找出他们的婚礼前几个月(例如),而不必在执行日期操作时重新发明轮子?
    • 一旦有了计算的日期,就可以使用相关数据库的日期/时间函数进行此类计算(在不同的数据库中执行方式略有不同)
    【解决方案2】:

    我在日期方面遇到了类似的问题;加上一些人也想说“6 月 15 日”的附加问题,但没有指定年份。这也是你要处理的案子吗?

    我将日、月和年存储在数据库中的三个单独的列中,每个列都可以为空,然后(在某种程度上)在我的应用程序中重新发明了轮子(以及禁止某些情况,例如人们说“15 日1974 年的")。

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

    我想这取决于您想在数据库中执行多少操作以及您想要在应用程序中执行多少操作。无论哪种方式,我认为您将发明一个形状略有不同的轮子。但是,当然,你可以制作一些整洁、封装、可重用的类——这会让它变得有趣! :-)

    【讨论】:

    • 感谢您之前实际体验过的好处,我知道您在这方面有过一些有趣的经历。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      “2010 年的某个时间”是 2010 年 7 月 1 日,相差 180 天。

      所以存储一个日期和 # 天。

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

      【讨论】:

      • 这也是一个很好的建议,因为我们只有一个日期可以操作,而灰色区域会随着日期的临近而下降。有趣的是,我们还可以在人们倾向于结婚的周末对静态日期进行加权...
      【解决方案5】:

      您可以将其存储为包含日期后和日期前列的范围。

      【讨论】:

      • 有趣,这样我可以取一个平均日期并对其执行日期操作,这可以是动态的,所以随着日子的临近,他们可以决定将其锁定更多。
      • 对于计划或通知(这听起来像是针对),我认为范围的开始与中点一样重要或更重要。例如,“您需要在月底之前预订歌手才能在一月份获得他们”,即使范围是一月至三月。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2012-12-20
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      相关资源
      最近更新 更多