首页 > 解决方案 > sql拆分SQL SERVER 2019中逗号的列

问题描述

嗨,我正在寻找帮助在 sql 中拆分具有逗号的列

在此处输入图像描述

标签: sqlsql-serverstringcsvsql-server-2019

解决方案


SQL Server 2019 提供了一个内置的字符串拆分器,称为string_split(),可以将 CSV 字符串转换为行。唉,它无法跟踪 CSV 字符串中每个元素的原始位置,这使得它不适合像您这样的任务。

然而,我们可以使用这个openjson()技巧:这个想法是稍微操纵字符串以使其成为有效的 JSON 数组,然后我们可以取消嵌套(使用序数!)。

考虑:

select t.*, x.*
mytable t
cross apply (
    select 
        max(case when key = 1 then value end) col1,
        max(case when key = 2 then value end) col2,
        max(case when key = 3 then value end) col3,
        ...
    from openjson('["' +  replace(@str,',','","') + '"]')
) x;

当然,这要求您事先知道结果集中所需的最大列数。您可以select使用其他条件表达式扩展子查询的子句以生成更多列。


推荐阅读