sql server中自定义的多个不定分隔符split函数

发布时间:2020-07-19编辑:脚本学堂
sql server中自定义的多个不定分隔符split函数,有需要的朋友可以参考下。

sql server中自定义的多个不定分隔符split函数,有需要的朋友可以参考下。
 

复制代码 代码如下:
/****** Description: select * from dbo.Split('100,200 300;400',', ;')
return value is 4 rows table with values 100,200,300,400. 
******/
CREATE FUNCTION [dbo].[Split]
    (
      @str AS NVARCHAR(1000) ,
      @delimiters AS NVARCHAR(100)
    )
RETURNS @t TABLE
    (
      pos INT NOT NULL ,
      value NVARCHAR(100) NOT NULL
    )
AS
    BEGIN
        DECLARE @end INT ,
@start INT ,
@pos INT ,
@deliNO INT ,
@strChar NVARCHAR(1) ,
@delimiter NVARCHAR(1)
        SELECT @str=REPLACE(@str,' ',' '),@delimiters=REPLACE(@delimiters,' ',' ') 
        SET @str = LTRIM(RTRIM(@str))+SUBSTRING(@delimiters, 1, 1)
       
        SELECT  @pos = 1,@start = 1,@end = 1
               
        WHILE  @end <= LEN(@str) 
BEGIN 
SELECT  @strChar = SUBSTRING(@str, @end, 1) ,
@deliNO = 1
         
WHILE @deliNO <= LEN(@delimiters)
BEGIN               
SET @delimiter = SUBSTRING(@delimiters, @deliNO, 1)
IF @strChar = @delimiter
BEGIN
IF SUBSTRING(@str, @start, @end - @start) <> ''
BEGIN
INSERT  INTO @t
VALUES  ( @pos,SUBSTRING(@str, @start,@end - @start) )
SET @pos = @pos + 1
END
SET @start = @end + 1
break
END
SET @deliNO = @deliNO + 1
END
SET @end = @end + 1
END
        RETURN
    END
GO