【问题标题】:Get difference between day just when the difference is positive仅当差异为正时才获得差异
【发布时间】:2020-02-29 00:16:25
【问题描述】:

使用 Postgresql,我需要减去两个日期,并在日期之间的差异结果为正数或 0 时显示结果。为了减去我正在使用的日期:

SELECT
EXTRACT(EPOCH FROM ('2019-02-11 17:59:01.953894'::timestamp - '2019-12-09 02:08:16.01493'::timestamp))/60

但是,我需要这样的东西:

SELECT
    DECODE(SIGN(EXTRACT(EPOCH FROM ('2019-02-11 17:59:01.953894'::timestamp - '2019-12-09 02:08:16.01493'::timestamp))/60 as d),-1, None,
                                                                                                                                ,1, d) 

运行上一个查询,我收到以下错误:

ERROR:  syntax error at or near "as"
LINE 2: ...mestamp - '2019-12-09 02:08:16.01493'::timestamp))/60 as df)
                                                                 ^

你知道如何克服这个问题吗?

非常感谢

【问题讨论】:

    标签: sql postgresql date timestamp


    【解决方案1】:

    您可以使用GREATEST 将负值变为0:

    GREATEST(
        EXTRACT(EPOCH FROM (ts1 - ts2))/60,
        0
    )
    

    或者,如果您想要在差值为负时得到null 结果,您可以使用case 表达式在尝试减去它们之前比较时间戳:

    CASE WHEN ts1 > ts2 THEN  EXTRACT(EPOCH FROM (ts1 - ts2))/60 END
    

    【讨论】:

      【解决方案2】:

      试试这个:

        SELECT greatest((EXTRACT(epoch from age('2019-02-11', now())) / 86400)::int, 0) 
      

      【讨论】:

        猜你喜欢
        • 2014-10-04
        • 2018-03-31
        • 2019-06-15
        • 2013-11-03
        • 2019-08-10
        • 2011-01-05
        • 2019-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多