3

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

我想将这个字符串分开,如“A”和“B~C”。

我可以使用此功能分隔“A”

SELECT SUBSTRING(Item.Description, 0, CHARINDEX('~', Item.Description)) As Com

但在那之后,我不能分开'B~C'。

当然如果我用SUBSTRINGCHARINDEX很多,我可以分开。

但这非常复杂。

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

非常感谢阅读

4

1 回答 1

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

以下是您将如何使用它:

SELECT * FROM dbo.Split('~', 'A~B~C~D')

输出:

chunk
-------------
A
B
C
D

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

于 2013-10-18T17:04:36.810 回答