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

标签 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'

最佳答案

是的,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


link 中的 Microsoft 引用、解释和示例
informit 关于用户定义函数的文章 link2
最后来自 SQL Team 网站,对 User Defined Functions 的介绍

关于sql - 定义一个函数并在 SQL 查询中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46071083/

相关文章:

sql - 将十进制数转换为 INT SQL

c++ - 关于函数声明中指向函数的指针

ios - 用函数修改多张图片

MYSQL 在一列上选择两个值

c# - 如何执行嵌套? SQL 中的请求?

c# - 从 C# 将字节数组插入 SQL Server 以及如何检索它

sql-server - 在SQL Server中将所有大写字母转换为小写字母?

php - 为什么我无法将连接变量传递给我的函数?

php - MySQL使用多个表查找一条记录

php - 使用 "AND"表达式构建动态 SQL 而不会混淆嵌套条件?