oracle中新建datediff()函数

datediff()是SQLServer的函数,如果要在oracle中填写此函数,如下操作。

1.建CDate函数

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;

2.建CDateTime函数

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;

3.建Datediff函数

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;

备注:oracle中利用日期间的加减运算如下

天:
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)

你可能感兴趣的:(oracle中新建datediff()函数)