SQL Server逗号分隔列值转多行的T-SQL脚本解决方案求助
T-SQL拆分逗号分隔字符串为独立行方案
方案1:SQL Server 2016及以上版本(推荐)
直接使用内置STRING_SPLIT函数实现,语法简单性能最优:
SELECT s.value AS split_value FROM Test t CROSS APPLY STRING_SPLIT(t.value, ',') s
如果需要携带Test表的其他关联字段,直接在SELECT子句中添加即可:
-- 示例:同时输出Test表的id字段 SELECT t.id, s.value AS split_value FROM Test t CROSS APPLY STRING_SPLIT(t.value, ',') s
方案2:SQL Server 2014及更早版本(兼容旧环境)
没有STRING_SPLIT函数的旧版本,可通过XML解析实现拆分:
SELECT LTRIM(RTRIM(m.n.value('.[1]', 'varchar(20)'))) AS split_value FROM ( SELECT CAST('<root><row>' + REPLACE(t.value, ',', '</row><row>') + '</row></root>' AS XML) AS split_xml FROM Test t ) tmp CROSS APPLY split_xml.nodes('/root/row') m(n)
注意:可根据实际字符串长度调整
varchar(20)的长度定义,LTRIM、RTRIM用于去除拆分后可能存在的前后空格。
效果验证
针对你给出的示例字符串,两种方案运行后都会输出10行独立的数值结果,和原始逗号分隔的每个取值一一对应。
内容的提问来源于stack exchange,提问作者SQL Rookie
相关产品推荐
相关产品推荐

