zoukankan      html  css  js  c++  java
  • PostgreSQL 时间转换

    背景:最近频繁使用到时间转换相关的操作,特此小记。

    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、附上链接

    时间/日期函数和操作(官网)
    时间/日期函数和操作(中文)

    测试签名
  • 相关阅读:
    OL8.0静默安装Oracle 19C
    MYSQL GTID 复制
    MYSQL异步复制
    YUM方式安装MYSQL5.7
    【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)
    【网友的】《一个程序猿的生命周期》读后感
    连载《一个程序猿的生命周期》-22.缺了一条腿的公司
    续评《遇到一位ITer,一位出租车司机,必看》
    遇到一位ITer,一位出租车司机,必看。
    连载《一个程序猿的生命周期》-21.而立之年,第一次跳槽,寻求转型
  • 原文地址:https://www.cnblogs.com/WinterSir/p/15154546.html
Copyright © 2011-2022 走看看