Split function equivalent in T-SQL?

后端 未结 15 1825
深忆病人
深忆病人 2020-11-21 07:23

I’m looking to split \'1,2,3,4,5,6,7,8,9,10,11,12,13,14,15...\' (comma delimited) into a table or table variable.

Does anyone have a function that returns each one

15条回答
  •  温柔的废话
    2020-11-21 08:05

    This is another version which really does not have any restrictions (e.g.: special chars when using xml approach, number of records in CTE approach) and it runs much faster based on a test on 10M+ records with source string average length of 4000. Hope this could help.

    Create function [dbo].[udf_split] (
        @ListString nvarchar(max),
        @Delimiter  nvarchar(1000),
        @IncludeEmpty bit) 
    Returns @ListTable TABLE (ID int, ListValue nvarchar(1000))
    AS
    BEGIN
        Declare @CurrentPosition int, @NextPosition int, @Item nvarchar(max), @ID int, @L int
        Select @ID = 1,
       @L = len(replace(@Delimiter,' ','^')),
                @ListString = @ListString + @Delimiter,
                @CurrentPosition = 1 
        Select @NextPosition = Charindex(@Delimiter, @ListString, @CurrentPosition)
       While @NextPosition > 0 Begin
       Set  @Item = LTRIM(RTRIM(SUBSTRING(@ListString, @CurrentPosition, @NextPosition-@CurrentPosition)))
       If      @IncludeEmpty=1 or LEN(@Item)>0 Begin 
         Insert Into @ListTable (ID, ListValue) Values (@ID, @Item)
         Set @ID = @ID+1
       End
       Set  @CurrentPosition = @NextPosition+@L
       Set  @NextPosition = Charindex(@Delimiter, @ListString, @CurrentPosition)
      End
        RETURN
    END
    

提交回复
热议问题