子串一列用逗号分隔的值,以使这些值在不同的列中

时间:2018-07-09 05:38:18

标签: sql sql-server tsql sql-server-2016

我有一个由SQL查询返回的列。

enter image description here

上面是列结果,我需要将逗号(,)的值分隔到不同的列中。

2 个答案:

答案 0 :(得分:0)

尝试一下:

SELECT s.PET_NAME
FROM Table1 CROSS APPLY
     STRING_SPLIT(PET_NAME, ',') s(PET_NAME);  

答案 1 :(得分:0)

例如通过xml:

-- split to columns
select
    ltrim(rtrim(t.x.value('(x)[1]', 'varchar(20)'))) as pet1,
    ltrim(rtrim(t.x.value('(x)[2]', 'varchar(20)'))) as pet2,
    ltrim(rtrim(t.x.value('(x)[3]', 'varchar(20)'))) as pet3,
    ltrim(rtrim(t.x.value('(x)[4]', 'varchar(20)'))) as pet4,
    ltrim(rtrim(t.x.value('(x)[5]', 'varchar(20)'))) as pet5
from (
    select cast(('<x>'+replace(pet_name, ',','</x><x>')+'</x>') as xml) x
    from YourTable) t (x)

例如,您可以使用子字符串函数,但是它更加复杂,因为不确定列的可能列。临时解析是最好的工具文本编辑器,例如excel(功能区数据/文本到列)。

要拆分为列,您不能使用STRING_SPLIT(它将拆分为行)。