如何在T-SQL中将表内多值字段拆分并生成对应独立行数据
T-SQL拆分逗号分隔多值列为多行实现方案
适用版本:SQL Server 2016 及以上(内置STRING_SPLIT函数)
这是最简洁的实现方式,直接调用系统内置拆分函数即可:
-- 假设你的原始表名为SampleTable,可替换为实际表名 SELECT t.Col1, LTRIM(RTRIM(s.value)) AS Col2 FROM SampleTable t CROSS APPLY STRING_SPLIT(t.Col2, ',') s
逻辑说明:
STRING_SPLIT(待拆分列, 分隔符)是SQL Server 2016推出的内置拆分函数,会返回拆分后所有值的结果集CROSS APPLY用于关联原表和拆分后的结果集,自动为每个拆分后的值生成对应新行LTRIM(RTRIM())用于去除拆分后值前后的空格,适配示例中逗号后带空格的原始数据场景
适用版本:SQL Server 2016 以前(无内置拆分函数)
可以用XML解析的方式实现拆分逻辑:
SELECT t.Col1, LTRIM(RTRIM(s.n.value('.', 'VARCHAR(100)'))) AS Col2 FROM ( SELECT Col1, CAST('<N>' + REPLACE(Col2, ',', '</N><N>') + '</N>' AS XML) AS XmlCol FROM SampleTable ) t CROSS APPLY XmlCol.nodes('/N') s(n)
逻辑说明:
- 先通过
REPLACE把逗号替换为XML节点标签,将整列值转换为标准XML格式 - 再通过
nodes()方法解析XML节点,得到每个拆分后的值 - 可根据实际业务调整返回值的长度和数据类型
内容的提问来源于stack exchange,提问作者tmcs10
相关产品推荐
相关产品推荐

