mssql sqlserver 字符串采用特殊字符分隔的方法分享(sql版的split函数)


摘要:
由于我们存储数据时,常喜欢将数据按照一定的格式进行叠加,然后存储在数据库中,使用数据时,希望使用行集数据进行使用,下文将讲述sql版的字符串分隔函数的使用方法
实验环境:sqlserver 2008


常见的数据表中合并数据格式如下:
1005,8888,1009,1020,
用户希望输入 以上字符串和分隔字符逗号,返回”表格数据”。
———————————————————-
由于sqlserver 2008版本中,没有原生态的split分隔函数(sqlserver 2016版本中有string_split函数),
我们需使用自定义函数,制作字符串分隔函数,达到数据分隔的目的,如下所示:

   drop function  [dbo].[sqlServerSplit] 
go

/*
创建自定义字符串分隔函数
使用 charindex substring 函数完成此功能的编写
*/
CREATE FUNCTION [dbo].[sqlServerSplit] 
( 
@inputInfo  nvarchar(800),  
@splitString nvarchar(8) 
)
RETURNS @tmp TABLE(outPutInfo nvarchar(500)) 
AS
BEGIN
-- 定义临时变量
DECLARE @tmpI int,@tempInput nvarchar(500) 
SET @tmpI=CHARINDEX(@splitString,@inputInfo)   ---获取当前字符串中分隔字符串的起始位置

WHILE(@tmpI<>0) 
BEGIN

        SET @tempInput = SUBSTRING(@inputInfo,1,@tmpI-1)  
        
        INSERT INTO @tmp(outPutInfo) VALUES(@tempInput)  

        SET @inputInfo = SUBSTRING(@inputInfo,@tmpI+1,LEN(@inputInfo)-@tmpI) 
        SET @tmpI=CHARINDEX(@splitString,@inputInfo)  
 END  
    
    /*分隔字符串最后位置数据插入*/
    SET @tempInput = @inputInfo 
    IF (LEN(@tempInput)>0) 
        INSERT INTO @tmp(outPutInfo) VALUES(@inputInfo)  
        

RETURN

END

GO


---函数测试:

SELECT * FROM dbo.[sqlServerSplit](N'猫猫,maomao365,猫猫小屋,这是一个blog,sqlserver教程网,sqlserver技巧网,',',')