阅读量: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操作。