首页 > 解决方案 > 仅当差异为正时才获得差异

问题描述

使用 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)
                                                                 ^

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

非常感谢

标签: sqlpostgresqldatetimestamp

解决方案


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

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

或者,如果您想要null差异为负时的结果,您可以使用一个case表达式来比较时间戳,然后再尝试减去它们:

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

推荐阅读