• SQL Server用户自定义函数


    分为表值函数(返回Table类型的表数据)和标量值函数(返回某个数据类型的某个值)

    标量值函数语法:【内可省略】

    create function 【[dbo].】函数名(【参数……】)

    returns 数据类型

    as

    begin

    return 要返回的值

    end

    示例:

    --返回分隔字符串左面部分
    CREATE FUNCTION [dbo].[fn_leftFirst]   
    (  
        @source nvarchar(max), @split nvarchar(1000) 
    )  
    RETURNS nvarchar(max)  
    AS  
    BEGIN  
      if(CHARINDEX(@split, @source)>0)BEGIN
            return left(@source,CHARINDEX(@split, @source)-LEN(@split)+1)
        END
        return @source
    END

    调用:

    select [dbo].fn_leftFirst('123456789','34');

    返回:12。注意上述[dbo].不能省略。否则会报'fn_leftFirst' 不是可以识别的 函数名称。

    (多语句)表值函数语法1:

    create function 【[dbo].】函数名(【参数……】)

    returns @table TABLE(列名1 列名1类型,……)

    as

    begin

    insert into @table values(值1,……);

    returns @table

    end

    示例:

    --分隔字符串
    CREATE FUNCTION [dbo].[f_splitSTR](  
        @s   varchar(8000),   --待分拆的字符串  
        @split varchar(10)     --数据分隔符  
    )RETURNS @re TABLE(  
            col varchar(max))  
    AS  
    BEGIN  
        DECLARE   
            @splitlen int  
      
        -- 取分隔符的长度, 在分隔符后面加一个字符是为了避免分隔符以空格结束时, 取不到正确的长度  
        SET @splitlen = LEN(@split + 'a') - 2  
        -- 如果待分拆的字符串中存在数据分隔符, 则循环取出每个数据项  
        WHILE CHARINDEX(@split, @s)>0  
        BEGIN  
            -- 取第一个数据分隔符前的数据项  
            INSERT @re VALUES(LEFT(@s, CHARINDEX(@split, @s) - 1))  
              
            -- 将已经取出的第一个数据项和数据分隔符从待分拆的字符串中去掉  
            SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')  
        END  
          
        -- 保存最后一个数据项(最后一个数据项后面没有数据分隔符, 故在前面的循环中不会被处理)  
        INSERT @re VALUES(@s)  
        RETURN     
      end  

    (内联)表值函数语法2:

    create function 【[dbo].】函数名(【参数……】)

    returns TABLE(列名1 列名1类型,……)

    as

    begin

    return(select **** )

    end

     示例:

    CREATE FUNCTION [GetMoreThanSalary]
    (    
        @salary int
    )
    RETURNS TABLE 
    AS
    RETURN 
    (
        SELECT [FName],[FCity],[FAge],[FSalary] FROM [Demo].[dbo].[T_Person] Where [FSalary] > @salary
    )
    GO
  • 相关阅读:
    百度地图api
    白岩松视频
    rails3 unicorn部署
    rails3 unicorn部署
    rails3 unicorn部署
    nginx geoip 模块实现地区性负载均衡
    workingwithrails
    rails部署方案
    rails3使用cucumber和rspec进行测试
    rails3 unicorn部署
  • 原文地址:https://www.cnblogs.com/yanan7890/p/9275284.html
Copyright © 2020-2023  润新知