PostgreSQL中如何将时间间隔转换为秒数?含具体字段转换需求
在PostgreSQL中将时间间隔转换为秒数
在PostgreSQL里,有两种常用方法可以把interval类型的时间间隔转换为总秒数:
方法1:使用EXTRACT(EPOCH FROM ...)
这是最常用的方式,EXTRACT(EPOCH FROM interval)会返回时间间隔对应的总秒数,包含小数部分(用于表示毫秒、微秒等)。
结合你的需求,直接把计算time_left的表达式传入函数即可:
SELECT EXTRACT(EPOCH FROM ({{%event}}.created_at - (CURRENT_TIMESTAMP - INTERVAL '3600 SECOND'))) AS time_left_seconds;
方法2:使用DATE_PART('epoch', ...)
和EXTRACT效果完全一致,语法上略有不同:
SELECT DATE_PART('epoch', ({{%event}}.created_at - (CURRENT_TIMESTAMP - INTERVAL '3600 SECOND'))) AS time_left_seconds;
补充说明
- 两种方法都会将所有时间单位(年、月、日、小时、分钟等)统一换算成秒,比如1天2小时会返回
93600(243600 + 23600)。 - 如果计算出的
time_left是负数(比如created_at早于CURRENT_TIMESTAMP - 1小时),返回的秒数也会是负数,符合实际逻辑。 - 结果支持小数,比如时间间隔为1秒500毫秒,会返回
1.5。
如果你需要先计算出time_left再转换,也可以用子查询:
SELECT EXTRACT(EPOCH FROM time_left) AS time_left_seconds FROM ( SELECT ({{%event}}.created_at - (CURRENT_TIMESTAMP - INTERVAL '3600 SECOND')) AS time_left FROM {{%event}} ) AS sub;
内容的提问来源于stack exchange,提问作者Вячеслав Предеин
相关产品推荐
相关产品推荐

