逗号分隔问题

Posted

技术标签:

【中文标题】逗号分隔问题【英文标题】:Comma-separation trouble 【发布时间】:2015-08-11 07:47:14 【问题描述】:

在我的一张表中,我有这样的数据。

roolno  
-----------------------------
V658, V628
A001
A001, V003, V005, Z040
A001, V003, Z040
A001, A002
A001, A002, A003
A001, A002, A003, A004
A001, A002, A003, A004, A006
A001, A002, A003, A004, A006, A013, A015, A047, A100
A001, A002, A003, A004, A006, NULL, A046
NULL, B154, ''
C296, '', '  ', NULL, G652

我试图在单独的行中具有价值。

例如:这只是我举例的一行

A001, A002, A003, A004, A006, NULL, A046

应该变成:

A001, 
A002, 
A003, 
A004, 
A006, 
NULL,
A046

我检查了 Stack Overflow 上已有的许多帖子,但没有给出正确的结果。

请帮忙。

【问题讨论】:

为什么要标记 SQL ?您想使用查询来重新格式化您的数据吗?还是您更喜欢服务器端编程语言?你试过什么? 您的问题不清楚,能否请您改写一下? 不存储逗号分隔值之类的数据是要走的路! @Harry:我有两个表,可以说表 A 和表 B。表 A 中的可乐包含用逗号分隔的值。我想将元素排列成行并与表 B 进行内部连接。问候 @Raptor:嗨,我试过这个。sqlperformance.com/2012/07/t-sql-queries/split-strings。但它没有给我正确的结果。问候 【参考方案1】:

你可以使用

 SELECT   
 Split.r.value('.', 'VARCHAR(100)') AS Data  
 FROM  
 (
 SELECT CAST ('<M>' + REPLACE(roolno, ',', '</M><M>') + '</M>' AS XML) AS Data  
 FROM  table1
 ) AS r CROSS APPLY Data.nodes ('/M') AS Split(r);

或者如果你想放 where 子句你可以这样放

 SELECT   
 Split.r.value('.', 'VARCHAR(100)') AS Data  
 FROM  
 (
 SELECT CAST ('<M>' + REPLACE(roolno, ',', '</M><M>') + '</M>' AS XML) AS Data  
 FROM  table1 where roolno='A001, V003, Z040'
 ) AS r CROSS APPLY Data.nodes ('/M') AS Split(r);

【讨论】:

以上是关于逗号分隔问题的主要内容,如果未能解决你的问题,请参考以下文章

如果发现一个逗号分隔记录与另一个逗号分隔记录匹配,则获取记录

TSQL 将列中的逗号分隔值与逗号分隔参数进行比较

正则表达式逗号分隔分隔符

excel表格中怎样使用CSV逗号分隔格式?

为啥 Web API 可以正确解析动作路径中逗号分隔的 int 数组,但无法解析逗号分隔的十进制数组?

添加分隔符并删除逗号