使用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日期<B日期,返回负数;A日期=B日期,返回0。

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐