sql server表值函数与标量值函数写法与调用

表值函数:

/*
    实现split功能的函数,拆分为NVARCHAR类型  
*/
CREATE FUNCTION [dbo].[FUN_SplitCharsTable](@SourceSql NVARCHAR(4000),@StrSeprate NVARCHAR(10))      
    RETURNS @temp TABLE(a NVARCHAR(500))      
AS       
BEGIN    
    DECLARE @i INT      
    SET @SourceSql=RTRIM(LTRIM(UPPER(@SourceSql)))      
    SET @i=CHARINDEX(@StrSeprate,@SourceSql)      
    WHILE @i>=1      
    BEGIN      
        INSERT @temp VALUES(RTRIM(LTRIM(LEFT(@SourceSql,@i-1))))      
        SET @SourceSql=SUBSTRING(@SourceSql,@i+1,LEN(@SourceSql)-@i)      
        SET @i=CHARINDEX(@StrSeprate,@SourceSql)     
    END      
--  IF @SourceSql <> ''   
--    BEGIN   
        INSERT @temp VALUES(RTRIM(LTRIM(@SourceSql)))      
--    END
    RETURN
END
GO

调用:SELECT * FROM dbo.FUN_SplitCharsTable('1|2|3|4|5','|');

结果如下:

sql server表值函数与标量值函数写法与调用_第1张图片

标量值函数:

/*
    获取字符串内的分隔段
*/
CREATE FUNCTION [dbo].[GETSPLITCHAR](@STR NVARCHAR(4000),@SPLITCHAR NVARCHAR(1),@SPLITLENGTH INT)
    RETURNS NVARCHAR(50)
AS
BEGIN 
    DECLARE @RETURNSTR NVARCHAR(50)
    DECLARE @i INT      
    DECLARE @COUNT INT
    SET @COUNT = 1
    SET @STR=RTRIM(LTRIM(UPPER(@STR+@SPLITCHAR)))      
    SET @i=CHARINDEX(@SPLITCHAR,@STR)      
    WHILE @i>=1      
    BEGIN        
        SET @RETURNSTR = SUBSTRING(@STR,1,@i-1)  
        SET @STR=SUBSTRING(@STR,@i+1,LEN(@STR)-@i)
        SET @i=CHARINDEX(@SPLITCHAR,@STR) 
        
        IF @SPLITLENGTH = @COUNT
            RETURN @RETURNSTR
        SET @COUNT = @COUNT + 1 
    END       
    RETURN ''
END


GO

调用:SELECT dbo.GETSPLITCHAR('1|2|3|4|5','|',2);

结果如下:

sql server表值函数与标量值函数写法与调用_第2张图片

你可能感兴趣的:(sql,server)