我有三个用户自定义函数,我想实现下面这种自定义函数如何写,可以通过参数Y,Q,W来改变获取的值,就像自带的GETDATE()有year,week,weekday等参数一样自定义函数名('2011-01-29',Y)=2012
自定义函数名('2011-01-29',Q)=1
自定义函数名('2011-01-29',W)=1create function Get_FiscalYear
(@Year datetime)
returns int
as
begin
return DateDiff(Y,'2011-01-29',@Year)/364+2012
endcreate function Get_FiscalQtr
(@Qtr datetime)
returns int
as
begin
return DateDiff(D,'2011-01-29',@Qtr)/91+1-(4*(DateDiff(Y,'2011-01-29',@Qtr)/364))
endcreate function Get_FiscalWeek
(@Week datetime)
returns int
as
begin
return DateDiff(D,'2011-01-29',@Week)/7+1-(52*(DateDiff(Y,'2011-01-29',@Week)/364))
end

解决方案 »

  1.   

    创建函数对参数做判断,返回你需要的就是了。if ... else ...
      

  2.   

    写在一个函数里面 用if else判断 
      

  3.   

    create function get_yourset
    (@dt datetime,@f char(1))
    returns int
    as
    begin
    return (case @f when 'Y' then year(@dt) when 'Q' then datepart(wk,@dt) when 'W' then datepart(dw,@dt) else 0 end)
    end
    go
    select dbo.get_yourset('2011-01-29','Y')
    select dbo.get_yourset('2011-01-29','Q')
    select dbo.get_yourset('2011-01-29','W')
    /*
    -----------
    2011(1 行受影响)
    -----------
    5(1 行受影响)
    -----------
    7(1 行受影响)*/