您的位置:首页 > 数据库

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、附上链接 时间/日期函数和操作(官网) 时间/日期函数和操作(中文)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: