例子:计算 ISO 周的标量值用户定义函数
下例中,用户定义函数 ISOweek 取日期参数并计算 ISO 周数。为了正确计算该函数,必须在调用该函数前唤醒调用 SET DATEFIRST 1。 CREATE FUNCTION ISOweek  (@DATE datetime)
RETURNS int
AS
BEGIN
   DECLARE @ISOweek int
   SET @ISOweek= DATEPART(wk,@DATE)+1
      -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
   IF (@ISOweek=0) 
      SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 
         AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
   IF ((DATEPART(mm,@DATE)=12) AND 
      ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
      SET @ISOweek=1
   RETURN(@ISOweek)
END下面是函数调用。注意 DATEFIRST 设置为 1。SET DATEFIRST 1
SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'
下面是结果集。ISO Week
----------------
52

解决方案 »

  1.   

    --返回值的函数
    create function f_a(@a int)
    returns int
    as
    begin
      return(@a+1)
    end
    go--调用
    select dbo.f_a(100)
      

  2.   

    --返回表的函数
    create function f_b(@name sysname)
    returns table
    as
    return(select * from sysobjects where name=@name)
    go--调用
    select * from f_b('sysobjects')
      

  3.   

    zjcxc(邹建) ,我用您写的函数:
    create function f_a(@a int)
    returns int
    as
    begin
      return(@a+1)
    end
    go会出现如下的错误:
    服务器: 消息 170,级别 15,状态 1,行 1
    Line 1: Incorrect syntax near 'function'.
    服务器: 消息 137,级别 15,状态 1,行 5
    Must declare the variable '@a'.不知道该如何解决,请赐教!谢谢!