我有问题。我的表中有A~B~C~D
个值。
我希望将此字符串分开,例如“A”和“B~C”。
我可以使用此功能分离'A'
SELECT SUBSTRING(Item.Description, 0, CHARINDEX('~', Item.Description)) As Com
但在那之后,我无法分开'B~C'。
当然,如果我经常使用SUBSTRING
和CHARINDEX
,我可以分开。
但这很复杂。
所以我想知道我是否可以使用其他方式。
非常适合阅读
答案 0 :(得分: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 split function如何运作
答案 1 :(得分:1)
此解决方案基于XML:
DECLARE @Source VARCHAR(4000);
SET @Source = 'A~B~C~D';
DECLARE @x XML;
SET @x = CONVERT(XML, '<item>' + REPLACE(@Source, '~', '</item> <item>') + '</item>');
-- result @x = <item>A</item><item>B</item><item>C</item><item>D</item>
SELECT a.b.value('.', 'NVARCHAR(100)') AS Value
FROM @x.nodes('/item') a(b);
结果:
Value
-----
A
B
C
D