定义一个函数并在SQL查询中使用它

时间:2017-09-06 09:07:18

标签: sql sql-server function

我想创建一个函数并在我的小查询中使用它。我以前没有这样做,我真的不知道这样做。

它和其他语言一样吗? 喜欢

create function testFunction()...
begin
..
..
end

然后例如:

Select testFunction() 

它应该有用吗?

CREATE FUNCTION dbo.ISOweek (@DATE datetime)  
RETURNS int  
WITH EXECUTE AS CALLER  
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;  
GO  
SET DATEFIRST 1
SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week'

2 个答案:

答案 0 :(得分:2)

是的,SQL函数很容易创建。但您必须了解SQL中的3种不同类型的函数:
1)标量函数:
- 返回单个值 2)基于表格的功能:
- 返回表格 3)聚合函数:
返回一个值(但是通过窗口集循环的函数)。

使用模板在MS SQL Server 2012中创建函数:
Creating Function with the MS SQL Server Client

有一些很好的参考资源可用于开始创建SQL函数: 用户定义标量函数的示例(来自dotnettricks):

        --Create function to get emp full name 
        Create function fnGetEmpFullName
        (
          @FirstName varchar(50),
          @LastName varchar(50)
        )
        returns varchar(101)
        AS
        BEGIN 
          return (Select @FirstName + ' '+ @LastName);
        END


Microsoft link中的参考,解释和示例 关于此link2中用户定义函数的信息文章 最后来自SQL Team网站,介绍User Defined Functions

答案 1 :(得分:1)

这有点宽泛,你想要退回一张桌子吗?一个值?.. function可以做很多不同的事情,示例语法是:

CREATE FUNCTION Schema.FunctionName
(
@InputValue InputValueDataType --Parameters here
)
RETURNS ReturnDataType -- The data type you want to return it
AS
BEGIN
    -- Do some things with @InputValue
END

Microsoft Doc HERE它解释了执行此操作的不同方法

然后你可以SELECT * FROM schema.FunctionName (@InputValue)返回