这是我的问题:
我在sql列中有一个包含以下数据的列:
Answers
=======
1:2:5: <--- notice my delimiter
我需要能够将数字分解为一个结果集,我可以将其连接到查找表,例如
Answers_Expanded
=======
1 apple
2 pear
3 cherry
4 mango
5 grape
并返回
Answers
=======
apple pear grape
有这样的方式吗?
谢谢!
答案 0 :(得分:1)
这个blog post有一个很好的用户定义函数示例,它将返回一个表,其中包含列中分隔字符串的值。然后,您可以将该表连接到Answers_Expanded表以获取您的价值。
如果您正在解析相当短的字符串,并且如果您将其作为一次性事情进行,那么这可以正常工作,但是如果您将表的答案存储在类似的列中,则您不希望运行这对整个桌子来说都是一个很大的表现。理想情况下,您希望避免在SQL中获得这样的分隔字符串。
答案 1 :(得分:1)
这有点像黑客(LIKE
,XML PATH
和STUFF
),它假定您希望按ID
排序的答案而不是与多值列中的原始订单匹配...
但这会给你想要的结果:
SELECT STUFF((
SELECT ' ' + ae.Answer
FROM
Answers_Expanded ae
JOIN Answers a ON ':' + a.Answers LIKE '%:' + CAST(ae.ID AS VARCHAR) + ':%'
ORDER BY ae.ID
FOR XML PATH(''))
, 1, 1, '') AS Answers
这是因为:
LIKE
会找到与多值列匹配的所有Answer_Expanded
行。XML PATH
模拟群组连接...并允许将' '
指定为分隔符STUFF
删除了前导分隔符。答案 2 :(得分:0)
我建议您以一个单元格只有一个数字的方式保存答案...而不是一个单元格中的多重信息。 (违反第1范式)。
否则你最好使用一些更高级的SQL语言,比如T-SQL。