【问题标题】:PostgreSQL - how to find records where the difference between two dates is greater than 1 day/month?PostgreSQL - 如何查找两个日期之间的差异大于 1 天/月的记录?
【发布时间】:2020-11-10 16:10:38
【问题描述】:

我将订单存储在 DB 表中,其中每个订单都有一个可以“取货”的日期列和一个表示可以“取货”的日期列。

这是一个简化的结构:

id | ... | pickup_from | pickup_to
1  | ... | 2020-10-15  | 2020-10-16
2  | ... | 2020-08-07  | 2020-10-16 
3  | ... | 2020-10-01  | 2020-10-03

我想查找 pickup_frompickup_to 之间的范围/间隔大于 2 个月的所有记录。在这种情况下,结果将是这条记录:

2  | ... | 2020-08-07  | 2020-10-16 

我该怎么做?

【问题讨论】:

    标签: sql postgresql datetime where-clause date-arithmetic


    【解决方案1】:

    使用日期算术:

    select *
    from mytable t
    where pickup_to > pickup_from + interval '2 month'
    

    【讨论】:

    • 是否也支持ANSI SQL区间语法,即interval '2' month?
    • @jarlh:是的,Postgres 也支持这一点,尽管这在某种程度上不太灵活(例如 interval '1 month 2 hour 3 seconds'
    【解决方案2】:

    使用interval添加时间段:

    where pickup_to > pickup_from + interval '2 month'
    

    【讨论】:

    • 答案在同一秒内发布,已经有一段时间了……不过这次我的答案首先出现。我想知道 SO 是否真的在发布答案时存储了派系秒数。
    • @GMB 。 . .如果 SO 没有,我会感到惊讶。它基于 SQL Server 构建,甚至 datetime 数据类型也只有几分之一秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2011-03-01
    • 2011-06-24
    • 2013-07-23
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多