我有问题.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'.
当然,如果我使用SUBSTRING和CHARINDEX了很多,我可以分开.
但它非常复杂.
所以我想知道我是否可以使用其他方式.
非常适合阅读
这是一个简短的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拆分功能如何工作的更多信息