网络上查询很久,最好的也是最常见到的SQL语句是:
create table tb(id int,value varchar(30)) insert into tb values(1,'aa,bb') insert into tb values(2,'aaa,bbb,ccc') go SELECT *FROM tb
SELECT A.id, B.value
FROM( SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb )A OUTER APPLY( SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v) )B
DROP TABLE tb--删除表
试用体验,确实非常完美;
应用在实际案例中:
SELECT A.mainid ,B.fpdh FROM( SELECT mainid,[fpdh] = CONVERT(xml,'<root><v>' + REPLACE([fpdh], '、', '</v><v>') + '</v></root>') FROM [ecology].[dbo].[uf_backinfo_dt1] )A OUTER APPLY( SELECT fpdh = N.v.value('.', 'varchar(100)') FROM A.[fpdh].nodes('/root/v') N(v) )B
但是这个SQL语句实在是知其然不知其所以然。。。