create or replace
function INTTODATE(@date int)
returns datetime
as
begin
declare @datetime datetime
set @datetime = dateadd(dd,right(@date,3)-1,cast(rtrim(1900+left(@date,3))+'0101' as datetime))--sql语句
--to_date(trunc(yadob/1000)+1900||'-01-01','yyyy-mm-dd')+mod(yadob,1000)-1(oracle语句)
return @datetime
end
go
此函数的作用是输入一个int,输出一个date值。比如110001,前三位表示世纪和年,1900+110=2010年,后三位表示这一年的某一天。001是1月1号,002是1月2号,如此类推。这个函数是sql下的,如何转化成oracle函数?谢谢。
备注:语句中已经把oracle的转化语句写好。

解决方案 »

  1.   

    create or replace function INTTODATE(in_date IN NUMBER)
    return date
    is
      vd_datetime date;
    begin
      vd_datetime := to_date(trunc(in_date/1000)+1900||'-01-01','yyyy-mm-dd')+mod(in_date,1000)-1;
      return vd_datetime;
    END;
      

  2.   


    create or replace function INTTODATE(in_date in number)
    return date
    is
      vd_datetime date;
    begin
      vd_datetime := to_date(to_char(trunc(in_date/1000)+1900)||'-01-01','yyyy-mm-dd')+mod(in_date,1000)-1; --最好加下to_char
      return vd_datetime;
    end;
      

  3.   


    create or replace function INTTODATE
    (
        indate        number
    )
    return date
    as
    begin
        return to_date(1900000 + indate,'yyyyddd');
    end INTTODATE;SQL> select INTTODATE(110001) from dual;
     
    INTTODATE(110001)
    -----------------
    2010-1-1