在oracle中实现DateDiff函数的功能

在orcale中是没有DateDiff函数的功能的,想要实现时间比对功能可以这么写:

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;
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值