Oracle获取两个日期的相差值

本文介绍如何使用Oracle SQL中的通用表DUAL进行日期计算,包括计算两个日期间的天数、小时数、分钟数、秒数、月份及年数,并提供具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值