目标:
具有一列(该表中不存在)表示直到下次发生重复事件之前所剩余的秒数,这由“上一次完成”(时间戳)与“时间跨度”组合确定字符串”列,它是一个字符串,例如“ 7天”或“ 25分钟”或“ 2周”(标准PG兼容间隔字符串)。
查询:
SELECT
*,
now() - "last done" - "time span string"::interval AS "seconds left until next"
FROM "recurring events"
ORDER BY "seconds left until next" DESC NULLS LAST;
“距离下一个秒数”一列的值奇异,例如:
-1 days +00:32:04.389802
期望值示例:
123456
我不明白为什么它不使用列进行计算。似乎是在以解释的方式或某种方式构造它们的值的字符串。我不知道如何形容。
我尝试过:: integer AS表达式,但这只给了我错误:
ERROR: cannot cast type interval to integer
这个问题与实际表达式的正确“公式” /顺序无关,因为它不会将列(或单元格,而是一个整数)转换为整数(代表该秒数)活动直到下一次)。
now() - "last done" - "time span string"::interval
您要减去的值已经看起来像几秒钟。因此,只需减去两个日期/时间,然后转换为秒并减去时间跨度即可: