SQL SERVER 自定义函数
标量函数:返回一个标量值
表格值函数{内联表格值函数、多表格值函数}:返回行集(即返回多个值)
主要是熟悉具体的语法和常用的函数
标量函数
CREATE FUNCTION FUN(@A INT,@B INT) RETURNS INT AS BEGIN DECLARE @RESULT INT SET @RESULT=@A+@B; RETURN @RESULT; END GO --调用 SELECT dbo.FUN(3,2) AS RESULT
内联表函数
--表函数 表函数中 --内嵌表不需要begin end CREATE FUNCTION SHOW() RETURNS TABLE AS RETURN( SELECT * FROM STUDENT ) GO --调用 SELECT * FROM dbo.SHOW()
多表格值函数(多表格值函数包含多条sql语句,至少有一条在表变量中填充数据)
CREATE FUNCTION SHOWMAN() RETURNS @TABLE TABLE(ID INT,NAME VARCHAR(100),AGE INT,SEX VARCHAR(10),REMARK VARCHAR(100),PK INT) AS BEGIN INSERT INTO @TABLE --当函数执行完之后,表变量将被自动删除 SELECT * FROM STUDENT RETURN --直接return 就行了; END SELECT * FROM dbo.SHOWMAN()
查看函数
-- SELECT * FROM sys.objects WHERE TYPE='FN' AND NAME='ISOUTDATE'
修改函数
--将CREATE 变成ALTER 就行了
删除函数
--DROP FUNCTION FUNCTION_NAME
具体实例一
--判断是否超期; CREATE FUNCTION ISOUTDATE(@DATE DATETIME) RETURNS NVARCHAR(40) AS BEGIN DECLARE @RESULT NVARCHAR(30), @DIFF INT SET @DIFF=DATEDIFF(DAY,@DATE,GETDATE())-30 --期限是30天 IF(@DIFF>0) BEGIN --超期了 SET @RESULT='OVER '+CONVERT(VARCHAR(10),@DIFF) +' DAY' END ELSE BEGIN --剩余时间 SET @DIFF=ABS(@DIFF) SET @RESULT='REMIAN '+CONVERT(VARCHAR(10),@DIFF)+ ' DAY' END RETURN (@RESULT) END SELECT dbo.ISOUTDATE('2015-9-1') -- REMIAN 7 DAY SELECT dbo.ISOUTDATE('2015-5-1') -- OVER 116 DAY
具体实例二
顺便复习,sql转换;
CONVERT
CAST
存在一些隐式转换;
DECLARE @A INT, @B INT, @C VARCHAR(100) SET @A=100; SET @B=CAST(@A AS VARCHAR(100))--结果又被隐式转换成int SELECT @B+'1' -- 结果:101 --SELECT @B+'S' --不可以相加了,s 无法隐式转成int SELECT @B+1 --结果:101 SET @C=CAST(@A AS VARCHAR(100)) --结果是varchar SELECT @C+'1' -- 结果 1011 SELECT @C+'S' -- 结果:100s SELECT @C+ 1 -- 结果:101 --总结: + 字符中中,如果可以隐式转换的就转 --用cast 和 convert 两种装换方式; DECLARE @VAR INT, @RE VARCHAR(100) SET @VAR=100 SET @RE=CAST(@VAR AS VARCHAR(100)) SET @RE=CONVERT(INT,@VAR) --以上两种都是显示的转换, --还有一种隐式的转; SET @RE=@VAR SELECT @RE+'S' --结果100s
DECLARE @VAR INT
SET @VAR=100
-- SELECT STR(@VAR)+'S' --不过它会加上空格
SELECT CAST(@VAR AS VARCHAR(20))+'S'
这里推荐一篇sqlserver 自定义函数大全
http://blog.csdn.net/maco_wang/article/details/6261639