PostgreSQL 时间转换
2021-08-17 23:45
141 查看
背景:最近频繁使用到时间转换相关的操作,特此小记。
####1、实时取最近24小时内数据。 select now() - interval '24h'; 通过sql获得符合要求的时间段,当做where条件即可。如:
select * from table1 where createTime between now() - interval '24h' and now()
'24h' 等同于 '24 hour',更多参数见文档。
####2、时间差转换为时、分、秒。 关键函数:EXTRACT(field FROM source)、date_part('field', source)
SELECT date_part('epoch', TIMESTAMP '2021-08-17 21:00:00' - TIMESTAMP '2021-08-17 20:00:00') 秒; --结果:3600 SELECT date_part('epoch', TIMESTAMP '2021-08-17 21:00:00' - TIMESTAMP '2021-08-17 20:00:00')/60 分钟; --结果:60 SELECT date_part('epoch', TIMESTAMP '2021-08-17 21:00:00' - TIMESTAMP '2021-08-17 20:00:00')/60/60 小时; --结果:1 SELECT date_part('epoch', TIMESTAMP '2022-08-17 20:00:00' - TIMESTAMP '2021-08-17 20:00:00')/60/60/24 天; --结果:365,如果不需要精确到小数有更简单的: SELECT date '2022-08-17' - date '2021-08-17' 天; --结果:365
月和年的天数不确定,不能用以上方法,需要分别计算相加,如:
SELECT date_part('year', age(TIMESTAMP '2023-02-17 20:00:00' , TIMESTAMP '2021-08-17 20:00:00'))*12 + date_part('month', age(TIMESTAMP '2023-02-17 20:00:00' , TIMESTAMP '2021-08-17 20:00:00')) 月; --结果:18 SELECT date_part('year', age(TIMESTAMP '2023-02-17 20:00:00' , TIMESTAMP '2021-08-17 20:00:00')) + date_part('month', age(TIMESTAMP '2023-02-17 20:00:00' , TIMESTAMP '2021-08-17 20:00:00'))/12 年; --结果:1.5
以上示例均可使用extract函数,如:
SELECT extract(EPOCH FROM TIMESTAMP '2021-08-17 21:00:00' - TIMESTAMP '2021-08-17 20:00:00') 秒; --结果:3600,此处不再一一举例
####3、注意 #####3.1 field域值 field可以是day、month、minute、year,也可以是:dow(一周中的日,从周日(0)到周六(6))、doy(一年的第几天(1–365/366)),等等、、、但是前者获取的只是域值。如:
SELECT date_part('hour', TIMESTAMP '2021-08-17 20:00:00'); --结果:20 SELECT date_part('hour', TIMESTAMP '2021-08-17 21:00:00' - TIMESTAMP '2021-08-17 20:00:00'); SELECT date_part('hour', TIMESTAMP '2021-08-18 21:00:00' - TIMESTAMP '2021-08-17 20:00:00'); --结果: 1 结果相同都是1,并不会做跨天的处理。
######3.2 epoch 对于timestamp with time zone值, 是自 1970-01-01 00:00:00 UTC 以来的秒数(结果可能是负数); 对于date and timestamp值,是自本地时间 1970-01-01 00:00:00 以来的描述;对于interval值,它是时间间隔的总秒数 (简单理解就是秒数差值......) ####4、附上链接 时间/日期函数和操作(官网) 时间/日期函数和操作(中文)
相关文章推荐
- PostgreSQL - 怎么将时间转换成秒
- postgresql数据库时间转换
- Postgresql关于日期和时间戳转换问题
- postgresql时间和时间戳之间转换
- Postgresql中时间戳与日期的相互转换(同样适用于GreenPlum)
- postgresql:时间戳转换为字符串
- postgresql 存储过程函数:时间戳与日期字符串相互转换
- postgresql 时间戳转换成普通时间
- 时间戳转换
- Perl 字符串转换成UNIX时间戳
- 时间戳转换时间格式
- php与js时间戳相互转换
- java编程如何实现2017-01-16 22:28:26.0这样的时间数据,转换成2017:01:16:22:28:26这样的时间数据
- Java时间转换(二)
- Python时间,日期,时间戳之间转换
- time_t tm timeval 和 时间字符串的转换
- UTC转换本地时间
- linux下C时间编程(1)——时间显示与转换
- 时间转换
- 用js转换时间