数据库日期处理对比

1 篇文章 0 订阅
1 篇文章 0 订阅

数据库日期处理对比

一、Oracle数据库

不同类型的转换
  • DATE类型转TIMESTAMP类型: TO_TIMESTAMP(SYSDATE)

  • TIMESTAMP类型转DATE类型:

    • TO_DATE(TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')
    • SYSTIMESTAMP+ 0
    • CAST(SYSTIMESTAMP AS DATE)
  • 字符串类型

    • 转DATE类型:TO_DATE('2021-11-19 19:00:00','YYYY-MM-DD HH24:MI:SS')
    • 转TIMESTAMP类型:TO_TIMESTAMP('2021-11-19 19:00:00','YYYY-MM-DD HH24:MI:SS')
  • DATE、TIMESTAMP类型转字符串类型:TO_CHAR(SYSDATE/SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS')

日期的加减(加减同理)
  • DATE

    • 当前时间减去1分钟的时间
      SELECT SYSDATE,SYSDATE - INTERVAL '1' MINUTE FROM DUAL;
    • 当前时间减去1小时的时间
      SELECT SYSDATE,SYSDATE - INTERVAL '1' HOUR FROM DUAL;
    • 当前时间减去1天的时间
      SELECT SYSDATE,SYSDATE - INTERVAL '1' DAY FROM DUAL;
    • 当前时间减去1月的时间
      SELECT SYSDATE,SYSDATE - INTERVAL '1' MONTH FROM DUAL;
    • 当前时间减去1年的时间
      SELECT SYSDATE,SYSDATE - INTERVAL '1' YEAR FROM DUAL;
  • TIMESTAMP(DATE)

    • 对TIMESTAMP、DATE加减天、小时、分钟、秒的函数
    NUMTODSINTERVAL(x,c)
    x是一个数字,加减值,可以为小数和分数,如1,1/2, 0.05
    c是一个字符串,为加减单位 , 常用的单位有 ('day','hour','minute','second')表明x的单位,这个函数把x转为interval day to second数据类型
    例:SELECT SYSTIMESTAMP,SYSTIMESTAMP+NUMTODSINTERVAL(3,'HOUR') AS RES FROM DUAL;
    
    • 对TIMESTAMP、DATE加减年、月的函数
     NUMTOYMINTERVAL(x,c)
     常用的单位有'year','month'
     例:SELECT SYSTIMESTAMP,SYSTIMESTAMP+NUMTOYMINTERVAL(1,'year') AS RES FROM DUAL;
    
日期相减得到时间间隔
  • DATE类型日期相加减天、小时、分钟、秒

    SELECT CEIL((TO_DATE('2021-11-19 00:00:00' , 'YYYY-MM-DD HH24-MI-SS') - TO_DATE('2021-11-17 23:59:59' , 'YYYY-MM-DD HH24-MI-SS')))  相差天数 FROM DUAL;
    
  • DATE类型日期相加减年、月

    SELECT (EXTRACT(YEAR FROM TO_DATE('2021-05-01','YYYY-MM-DD')) - EXTRACT(YEAR FROM TO_DATE('2020-11-30','YYYY-MM-DD')))  FROM DUAL;
    
  • TIMESTAMP类型日期加减得到小时数

    SELECT TO_NUMBER(((TO_TIMESTAMP('2021-11-20 00:00:20','YYYY-MM-DD HH24:MI:SS')+0)-(TO_TIMESTAMP('2021-11-19 19:00:00','YYYY-MM-DD HH24:MI:SS')+0))*24) FROM DUAL ;
    

二、Greenplum数据库

不同类型的转换
  • DATE类型转TIMESTAMP类型:

    • to_timestamp(to_char(current_date,'yyyy-MM-dd') ,'yyyy-MM-dd hh24:mi:ss')
    • current_date::timestamp
  • TIMESTAMP类型转DATE类型:

    • to_date(to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-MM-dd')
    • current_timestamp::date
  • 字符串类型

    • 转DATE类型:
      • TO_DATE('2021-11-19 19:00:00','YYYY-MM-DD HH24:MI:SS')
      • '2021-11-19 19:00:00'::date
      • date '2021-11-19 19:00:00'
    • 转TIMESTAMP类型:
      • TO_TIMESTAMP('2021-11-19 19:00:00','YYYY-MM-DD HH24:MI:SS')
      • '2021-11-19 19:00:00'::timestamp
      • timestamp '2021-11-19 19:00:00'
  • DATE、TIMESTAMP类型转字符串类型:

    • TO_CHAR(SYSDATE/SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS')
    • SYSDATE/SYSTIMESTAMP::text
日期的加减(加减同理)
  • date

    • 当前时间减去1分钟的时间
      select current_date,current_date- interval '1 min';
    • 当前时间减去1小时的时间
      select current_date,current_date- interval '1 hour';
    • 当前时间减去1天的时间
      select current_date,current_date- interval '1 day';
    • 当前时间减去1月的时间
      select current_date,current_date- interval '1 mon';
    • 当前时间减去1年的时间
      select current_date,current_date- interval '1 year';
  • timestamp

    • 当前时间减去1分钟的时间
      select current_timestamp,current_timestamp - interval '1 min';
    • 当前时间减去1小时的时间
      select current_timestamp,current_timestamp - interval '1 hour';
    • 当前时间减去1天的时间
      select current_timestamp,current_timestamp - interval '1 day';
    • 当前时间减去1月的时间
      select current_timestamp,current_timestamp - interval '1 mon';
    • 当前时间减去1年的时间
      select current_timestamp,current_timestamp - interval '1 year';
日期相减得到时间间隔
  • DATE类型日期相加减得到天数

    select ('2015-01-15 17:05'::timestamp)::date-('2015-01-13 15:01'::timestamp)::date;
    
  • TIMESTAMP类型日期加减

    ① select ROUND(extract(epoch from(select ('2021-11-20 00:00:00'::timestamp - '2021-11-19 19:00:00'::timestamp)))/60/60) as hours
    ② select date_part('day','2015-01-15 17:05'::timestamp - '2015-01-13 15:01'::timestamp);
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值