sql - 我的半高级 PostgreSQL 查询有什么问题?(与计算时间和时间间隔有关。)
问题描述
目标:
有一列(表中不存在)表示距离下一次重复事件发生所剩的秒数,这由“最后完成”(timestamptz)和“时间跨度字符串”组合而成列,它是一个字符串,例如“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
在 Postgres 的日期算术中,减去时间戳会生成一个 类型的数据interval
,这就是您在结果中看到的。
您可以使用以下命令将其转换为秒extract()
:
extract(epoch from (now() - "last done" - "time span string"::interval))
推荐阅读
- sql - 如何从第一行中减去第二行,从第三行中减去第四行,依此类推
- reactjs - 无法在映射函数内的 React JS 中读取未定义的属性“substr”
- javascript - Python Flask + HTML如何在URL中显示选定的参数
- excel - 如何在 Excel 上为常数乘以时间(hh:mm)?
- flutter - Flutter:迭代期间的并发修改:'_GrowableList'的实例(长度:2)
- python - Qubole 中基于宽数据的 PySpark 机器学习
- odoo - 将 Odoo12 与 Alfresco 6 与 Alfodoo 集成
- php - PHP Trello API 发布请求
- java - 如何从不同的活动中检索布尔值?
- android - 尝试使用 Glide 全屏显示 ImageView 时屏幕冻结