oracle日期、时间计算与转换集合


--oracle两时间相减得到相差的时间

--1.months_between(date1,date2);date1和date2相减得到相差的月份。
   
   SELECT MONTHS_BETWEEN(TO_DATE('2015-05-11', 'yyyy-MM-dd'),
                         TO_DATE('2015-04-11', 'yyyy-MM-dd'))
     FROM DUAL;--相差一个月。

--2.ceil(date1-date2);date1-date2相减得到相差的天数
   
   SELECT CEIL(TO_DATE('2015-05-11 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -
               TO_DATE('2015-04-11 00:00:00', 'yyyy-mm-dd hh24-mi-ss'))
     FROM DUAL; --相差30天。

--3.获取两时间相差的豪秒数 ceil((date1 - date2) * 24 * 60 * 60 * 1000)
  
  SELECT CEIL((TO_DATE('2015-05-11 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -
              TO_DATE('2015-04-11 23:59:59', 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000)
    FROM DUAL;

--4.获取两时间相差的秒数 ceil((date1 - date2) * 24 * 60 * 60 )
SELECT CEIL((TO_DATE('2015-05-11 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -
            TO_DATE('2015-04-11 23:59:59', 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60)
  FROM DUAL;

--5.获取两时间相差的分钟数 ceil((date1 - date2) * 24 * 60 )
    
    SELECT CEIL((TO_DATE('2015-05-11 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -
                TO_DATE('2015-04-11 23:59:59', 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60)
      FROM DUAL;

--6.获取两时间相差小时数 ceil((date1 - date2) * 24 )
 
 SELECT CEIL((TO_DATE('2015-05-11 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -
             TO_DATE('2015-04-11 23:59:59', 'yyyy-mm-dd hh24-mi-ss')) * 24)
   FROM DUAL;

--7.其他
   
   SELECT SYSDATE, ADD_MONTHS(SYSDATE, 12) FROM DUAL; --加1年
   
   SELECT SYSDATE, ADD_MONTHS(SYSDATE, -12) FROM DUAL; --减1年
   
   SELECT SYSDATE, TO_CHAR(SYSDATE + 1, 'yyyy-mm-dd HH24:MI:SS') FROM DUAL; --加1天
   
   SELECT SYSDATE, TO_CHAR(SYSDATE + 1 / 24, 'yyyy-mm-dd HH24:MI:SS')
     FROM DUAL; --加1小时
   
   SELECT SYSDATE, TO_CHAR(SYSDATE + 1 / 24 / 60, 'yyyy-mm-dd HH23:MI:SS')
     FROM DUAL; --加1分钟
  
  SELECT SYSDATE,
         TO_CHAR(SYSDATE + 1 / 24 / 60 / 60, 'yyyy-mm-dd HH23:MI:SS')
    FROM DUAL; --加1秒
 

 

--毫秒转换日期
SELECT TO_CHAR(1506283724000 / (1000 * 60 * 60 * 24) +      
        TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE      
 FROM DUAL;
1470886843400--2016-08-11 11:40:43    
1506416357412--2017-09-26 04:59:17
1506326924463--2017-09-25 04:08:44
1506076599125--2017-09-22 06:36:39
--日期转换毫秒
SELECT TO_NUMBER(TO_DATE('2017-09-25 04:08:44', 'YYYY-MM-DD HH24:MI:SS') -      
                 TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000      
  FROM DUAL;   
  

 

oracle中日期类型与unix 时间戳的转换
Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。
Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数

CREATE OR REPLACE FUNCTION UNIX_TO_ORACLE(IN_NUMBER NUMBER)
  RETURN DATE IS BEGIN
  RETURN(TO_DATE('19700101', 'yyyymmdd') + IN_NUMBER / 86400 +
         TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE), 1, 3)) / 24);
END UNIX_TO_ORACLE;

CREATE OR REPLACE FUNCTION ORACLE_TO_UNIX(IN_DATE IN DATE) RETURN NUMBER IS
BEGIN
  RETURN((IN_DATE - TO_DATE('19700101', 'yyyymmdd')) * 86400 -
         TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE), 1, 3)) * 3600);
END ORACLE_TO_UNIX;

SELECT oracle_to_unix(SYSDATE) FROM dual;
SELECT UNIX_TO_ORACLE(1506418954) FROM dual;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值