逗号分隔问题
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);
【讨论】:
以上是关于逗号分隔问题的主要内容,如果未能解决你的问题,请参考以下文章
如果发现一个逗号分隔记录与另一个逗号分隔记录匹配,则获取记录