Oracle获取两个日期的相差值

avatar
作者
筋斗云
阅读量:40

使用oracle通用表(dual)进行操作。

1、相差天数

-- A日期 < B日期  返回负数
select to_number(to_date('20210101','yyyyMMdd')-to_date('20210131','yyyyMMdd'))  as 相差天数 from dual;   --   -30
-- A日期 > B日期  返回整数
select to_number(to_date('20210131','yyyyMMdd')-to_date('20210101','yyyyMMdd'))  as 相差天数 from dual; -- 30
-- A日期 = B日期  返回0
select to_number(to_date('20210101','yyyyMMdd')-to_date('20210101','yyyyMMdd'))  as 相差天数 from dual; -- 0

2、相差小时数,分钟数,秒数

-- 相差小时数
select to_number((to_date('20210102','yyyyMMdd')-to_date('20210101','yyyyMMdd')) * 24)  as 相差小时 from dual; -- 24
-- 相差分钟数
select to_number((to_date('20210102','yyyyMMdd')-to_date('20210101','yyyyMMdd')) * 24 * 60)  as 相差分钟 from dual; -- 1440
-- 相差秒数
select to_number((to_date('20210102','yyyyMMdd')-to_date('20210101','yyyyMMdd')) * 24 * 60 * 60)  as 相差分钟 from dual; -- 86400

3、相差月份 (months_between()函数)

-- 俩日期日号一致
select months_between(to_date('20210202','yyyyMMdd'),to_date('20210102','yyyyMMdd'))   as 相差月数 from dual;  -- 1
-- 俩日期日号不一致
select months_between(to_date('20210202','yyyyMMdd'),to_date('20210103','yyyyMMdd'))   as 相差月数 from dual;  -- 0.968

注:日期中带有日号,时,分,秒计算时,会进行精确计算。

4、相差年数(相差月份/12)

-- 俩日期月号日号一致
select (months_between(to_date('20210202','yyyyMMdd'),to_date('20200202','yyyyMMdd'))/12)   as 相差年数 from dual;  -- 1
-- 俩日期月号日号不一致
select (months_between(to_date('20210202','yyyyMMdd'),to_date('20200302','yyyyMMdd'))/12)   as 相差年数 from dual;  -- 0.92

注:日期中带有月号,日号,时,分,秒计算时,会进行精确计算。

总结:1、俩日期进行计算时,当A日期>B日期,返回整数;A日期

2、当计算俩日期共有多少时间时,需在函数后进行加1操作。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!