oracle中没有datediff()函数

本文介绍了在Oracle数据库中如何实现DATEDIFF函数的功能,通过日期之间的加减运算和创建自定义函数两种方式,实现了年、月、日、小时、分钟、秒等不同粒度的时间间隔计算。

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

在oracle中没有datediff()函数
可以用以下方法在oracle中实现该函数的功能:
1.利用日期间的加减运算
天:
ROUND(TO_NUMBER(END_DATE - START_DATE))
小时:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)
分钟:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)
秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)
毫秒
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)

2.写函数
Create Or Replace Function CDate(Datechar In Varchar2) Return Date Is 
    ReallyDo Date;  
Begin 
    Select to_date(to_char(to_date(to_char(Datechar), 'YYYY-MM-DD HH24:MI:SS'),  
                           'YYYY-MM-DD'),  
                   'YYYY-MM-DD')  
    Into ReallyDo  
    From Dual;  
    Return(ReallyDo);  
End CDate;  

Create Or Replace Function CDateTime(Datechar In Varchar2) Return Date Is 
    ReallyDo Date;  
Begin 
    Select to_date(to_char(to_date(to_char(Datechar), 'YYYY-MM-DD HH24:MI:SS'),  
                           'YYYY-MM-DD HH24:MI:SS'),  
                   'YYYY-MM-DD HH24:MI:SS')  
    Into ReallyDo  
    From Dual;  
    Return(ReallyDo);  
End CDateTime;  

Create Or Replace Function Datediff  
(  
    Datepart  In Varchar2,  
    StartDate In Varchar2,  
    EndDate   In Varchar2  
) Return Number Is 
    ReallyDo Numeric;  
Begin 
    Select Case Upper(Datepart)  
               When 'YYYY' Then 
                Trunc(Extract(Year From CDate(EndDate)) -  
                      Extract(Year From CDate(StartDate)))  
               When 'M' Then 
                Datediff('YYYY', StartDate, EndDate) * 12 +  
                (Extract(Month From CDate(EndDate)) -  
                 Extract(Month From CDate(StartDate)))  
               When 'D' Then 
                Trunc(CDate(EndDate) - CDate(StartDate))  
               When 'H' Then 
                Datediff('D', StartDate, EndDate) * 24 +  
                (to_Number(to_char(CDateTime(EndDate), 'HH24')) -  
                 to_Number(to_char(CDateTime(StartDate), 'HH24')))  
               When 'N' Then 
                Datediff('D', StartDate, EndDate) * 24 * 60 +  
                (to_Number(to_char(CDateTime(EndDate), 'MI')) -  
                 to_Number(to_char(CDateTime(StartDate), 'MI')))  
               When 'S' Then 
                Datediff('D', StartDate, EndDate) * 24 * 60 * 60 +  
                (to_Number(to_char(CDateTime(EndDate), 'SS')) -  
                 to_Number(to_char(CDateTime(StartDate), 'SS')))  
               Else 
                -29252888  
           End 
    Into ReallyDo  
    From Dual;  
    Return(ReallyDo);  
End Datediff;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值