【问题标题】:Postgres - show 'present' or 'current' in date stamp?Postgres - 在日期戳中显示“当前”或“当前”?
【发布时间】:2018-02-20 02:03:14
【问题描述】:

我有一张名为links 的表格,其中显示了两个人在一起的日期范围(即已婚)。以下是 2 行的示例:

id  association_left  association_right  dateFrom    dateTo
1   Dad               Mom                2010-02-13  2011-01-15
2   Dad               Mom                2012-04-17  2015-11-28

所以在这里我们看到爸爸和妈妈在一起有两个不同的时间段。

但我想知道:有没有办法表明爸爸和妈妈目前在一起?比如:

id  association_left  association_right   dateFrom       dateTo
3   Dad               Mom                 2016-02-09     present

如果不是,那么显示两个人是否当前在一起的有效方式是什么?

【问题讨论】:

  • 今年是 2018 年,“爸爸”和“妈妈”在一起。因此,我不明白你的问题。再想一想,您可能只希望 dateTo 成为 NULL
  • 哦,这是一个有趣的想法。也许我会使用 null
  • 通常人们为此使用null。在 Postgres 中,我会使用 infinity 来标记当前没有已知结束日期的内容
  • 哦,这很整洁。 infinity 似乎比 null 更合适。谢谢你。

标签: sql postgresql database-design


【解决方案1】:

最好使用infinity 作为延伸到未来的时间范围的上限。

NULL,意思是“未知”,并不是最好的表示,因为这样你就不能区分“未知日期”和“未来某处的数据”。

此外,如果您使用infinity,您的查询将变得更简单,因此更高效。比较:

... WHERE adate >= datefrom AND (dateto IS NULL OR adate <= dateto)

... WHERE adate BETWEEN datefrom AND dateto

第二个表达式可以更好地使用索引。

【讨论】:

    【解决方案2】:

    我想你是在问是否没有 dateTo 然后假设他们目前在一起

    保持 dateTo 列为空并使用 coalesce(dateTo,current_date)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2015-12-08
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多