1 SQL SERVER 实现字符串分割成table的方法

Posted 白羽轻飘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1 SQL SERVER 实现字符串分割成table的方法相关的知识,希望对你有一定的参考价值。

CREATE FUNCTION [dbo].[fn_SplitStringToTable]
(
    @p_Input     VARCHAR(MAX),
    @p_Delimeter CHAR(1) = ,
)
RETURNS @l_Table TABLE
(
    Id       INT IDENTITY(1, 1),
    Value    VARCHAR(511),
    Position INT,
    Length   INT
)

BEGIN
   DECLARE @l_Position INT,
           @l_Value    VARCHAR(256)
   
   SELECT @l_Position = 1,
          @l_Value = ‘‘
   
   IF RIGHT(@p_Input, LEN(@p_Delimeter)) <> @p_Delimeter
      SET @p_Input = @p_Input + @p_Delimeter
   
   WHILE SUBSTRING(@p_Input, @l_Position, 1) = CHAR(10) OR
        SUBSTRING(@p_Input, @l_Position, 1) = CHAR(13)
   BEGIN
      SELECT @l_Position = @l_Position + 1
   END
   
   WHILE @l_Position <= CHARINDEX(@p_Delimeter, @p_Input, @l_Position)
   BEGIN
      SET @l_Value = RTRIM ( LTRIM ( SUBSTRING ( @p_Input,
                                                 @l_Position,
                                                 CHARINDEX ( @p_Delimeter,
                                                             @p_Input,
                                                             @l_Position) - @l_Position ) ) )
      
      IF NOT EXISTS ( SELECT 1
                        FROM @l_Table
                       WHERE Value = @l_Value )
      BEGIN
         INSERT INTO @l_Table ( Value, Position, Length )
              VALUES ( @l_Value, @l_Position, CHARINDEX ( @p_Delimeter,
                                                          @p_Input,
                                                          @l_Position ) - @l_Position )
      END
      
      SELECT @l_Position = CHARINDEX(@p_Delimeter, @p_Input, @l_Position) + 1
      
      WHILE SUBSTRING(@p_Input, @l_Position, 1) = CHAR(10) OR
         SUBSTRING(@p_Input, @l_Position, 1) = CHAR(13)
      BEGIN
         SELECT @l_Position = @l_Position + 1
      END
   END
   RETURN
END

 

以上是关于1 SQL SERVER 实现字符串分割成table的方法的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 分割字符串转列

SQL一字段内的字符串按照特定字符串转化为多行显示

SQL Server用SPLIT函数分割字符串

SQL Server XML转Table

sql 替换指定字符串

SQL Server如何用SQL实现一批字符串的全部组合