我正在尝试使用以下格式在SQL中拆分字符串:
'John, Mark, Peter|23, 32, 45'
。
我们的想法是在第一列中包含所有名称,在第二列中包含年龄。
查询应该是“动态的”,字符串可以有多个记录,具体取决于用户条目。
有没有人知道怎么做,如果可能没有SQL函数?我尝试过交叉申请方法,但我无法使其发挥作用。
有什么想法吗?
答案 0 :(得分:1)
此解决方案使用Jeff Moden的DelimitedSplit8k。为什么?因为他的解决方案提供了项目的序数位置。序数位置许多其他功能的东西,包括微软自己的STRING_SPLIT
,没有提供。让这个正常工作将是非常重要的。
一旦你有了,解决方案变得相当简单:
DECLARE @NameAges varchar(8000) = 'John, Mark, Peter|23, 32, 45';
WITH Splits AS (
SELECT S1.ItemNumber AS PipeNumber,
S2.ItemNumber AS CommaNumber,
S2.Item
FROM dbo.DelimitedSplit8K (REPLACE(@NameAges,' ',''), '|') S1 --As you have spaces between the delimiters I've removed these. Be CAREFUL with that
CROSS APPLY DelimitedSplit8K (S1.item, ',') S2)
SELECT S1.Item AS [Name],
S2.Item AS Age
FROM Splits S1
JOIN Splits S2 ON S1.CommaNumber = S2.CommaNumber
AND S2.PipeNumber = 2
WHERE S1.PipeNumber = 1;