详细内容
Oracle里对应的DATEDIFF方法
发布日期:2012-09-28     点击:4667     字体:[ ]
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;
用户评论
昵称 
内容  *
验证码   
   
相关文章 更多...  
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计