使用 SQL Server 将逗号分隔的文本转换为多列结果

Posted

技术标签:

【中文标题】使用 SQL Server 将逗号分隔的文本转换为多列结果【英文标题】:Convert comma separated text into multiple column result using SQL Server 【发布时间】:2017-11-24 04:31:43 【问题描述】:

我有一个要求,我需要将一长串文本(用逗号分隔)转换为多行结果集。

这将用于与其他表的外部连接。

问题字符串(不在表格中,而是在excel表格中的外部字符串):

'A', 'B', 'C', ....

查询的预期输出

Output
-----
'A'  
'B'  
'C'  

我试图在实现上述解决方案的同时避免使用临时表。

如果可能,请提出建议。

【问题讨论】:

见***.com/questions/5493510/…的第二个回答 我认为如果我将这些字符串放在表中的多个列中,那会起作用。但就我而言,我有一个需要转换的外部文本(csv 文件)列表。不确定该解决方案是否适用于这种情况。 【参考方案1】:

尝试一些xml node 方法,它可以帮助你

DECLARE @CommValues NVARCHAR(MAX) = '''A'', ''B'', ''C'''


SELECT 
      LTRIM(A.value('.', 'NVARCHAR(MAX)')) [Comma Values] FROM 
(
    SELECT CAST('<X>'+REPLACE(@CommValues, ',', '</X><X>')+'</X>' AS XML) AS Comm
) X CROSS APPLY Comm.nodes('/X') as comm(a)

结果:

Comma Values
'A'
'B'
'C'

【讨论】:

这确实有效,但是查询太慢并且没有响应,因为我有一个很长的逗号分隔文本列表(大约 500,000)。它适用于少量数据,但不适用于我的情况。谢谢, Sql Server 版本为 10.50 Microsoft SQL Server 2008 R2(SP3) - 10.50.6529.0 (X64)

以上是关于使用 SQL Server 将逗号分隔的文本转换为多列结果的主要内容,如果未能解决你的问题,请参考以下文章

导出CSV文件是以逗号为分隔符的吗?

T-SQL -- 将逗号分隔的列转换为多列

sql [sql]将逗号分隔的字符串转换为sql(或)查询

使用逗号分隔符将单个 CSV 列批量转换为多个

mssql sqlserver sql对使用逗号分隔的字符串 转换为数据表的另类方法实现

VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点