sql - 仅当差异为正时才获得差异
问题描述
使用 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)
^
你知道如何克服这个问题吗?
非常感谢
解决方案
您可以使用GREATEST
将负值变为 0:
GREATEST(
EXTRACT(EPOCH FROM (ts1 - ts2))/60,
0
)
或者,如果您想要null
差异为负时的结果,您可以使用一个case
表达式来比较时间戳,然后再尝试减去它们:
CASE WHEN ts1 > ts2 THEN EXTRACT(EPOCH FROM (ts1 - ts2))/60 END
推荐阅读
- typescript - TypeScript:基于元组获取嵌套属性的类型
- android - WorkManager 重启后的行为是否可以自定义?
- javascript - 有一个错误 lerna 成功运行没有找到生命周期脚本“typecheck”的包
- angular - 具有 x 和 y 轴值的 ng2-charts 折线图
- react-native - 反应原生 TextInput 离开我的屏幕
- date - Teradata 使用 CASE 语句需要更改日期格式
- python - 为什么在尝试与位操作相乘时我偏离了 1-2?
- swift - 快速,如何使用 .crossDissolve 动画执行转场?
- docker - LCOW WS2019 中的 Linux 容器启动问题:CreateProcess 期间出错:Windows 系统调用失败:未指定错误 (0x80004005)
- powershell - 将 OUTLOOK.HOL 文件解析为 CSV