SQL SERVER 自定义函数

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

posted @ 2015-09-21 15:45  咕-咚  阅读(488)  评论(0编辑  收藏  举报