在SQL Server中,我想将字符串与'〜'分开

use*_*815 3 sql sql-server

我有问题.A~B~C~D我的表中有值.

我希望将这个字符串分开,如'A'和'B~C'.

我可以使用此功能分离'A'

SELECT SUBSTRING(Item.Description, 0, CHARINDEX('~', Item.Description)) As Com
Run Code Online (Sandbox Code Playgroud)

但在那之后,我无法分开'B~C'.

当然,如果我使用SUBSTRINGCHARINDEX了很多,我可以分开.

但它非常复杂.

所以我想知道我是否可以使用其他方式.

非常适合阅读

Eli*_*lie 5

这是一个简短的SQL函数,您可以创建它以拆分字符串:

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(8000))
RETURNS table
AS
RETURN (
    WITH splitter_cte AS (
      SELECT CHARINDEX(@sep, @s) as pos, 0 as lastPos
      UNION ALL
      SELECT CHARINDEX(@sep, @s, pos + 1), pos
      FROM splitter_cte
      WHERE pos > 0
    )
    SELECT SUBSTRING(@s, lastPos + 1,
                     case when pos = 0 then 80000
                     else pos - lastPos -1 end) as chunk
    FROM splitter_cte
  )
GO
Run Code Online (Sandbox Code Playgroud)

以下是您将如何使用它:

SELECT * FROM dbo.Split('~', 'A~B~C~D')
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

chunk
-------------
A
B
C
D
Run Code Online (Sandbox Code Playgroud)

阅读有关此sql拆分功能如何工作的更多信息