问题描述:
–有表tb, 如下: id values ———– ———– 1 aa,bb 2 aaa,bbb,ccc –欲按,分拆values列, 分拆后结果如下: id value ———– ——– 1 aa 1 bb 2 aaa 2 bbb 2 ccc
–1. 旧的解决方法 Select TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b Select A.id, SUBSTRING(A.[values], B.id, CHARINDEX(‘,’, A.[values] + ‘,’, B.id) – B.id) FROM tb A, # B Where SUBSTRING(‘,’ + A.[values], B.id, 1) = ‘,’
Drop TABLE #
– 2. 在SQL Server2005中使用的方法如下: – 示例数据
DECLARE @t TABLE(id int, [values] varchar(100)) Insert @t Select 1, ‘aa,bb’ UNION ALL Select 2, ‘aaa,bbb,ccc’ – 查询处理 Select A.id, B.value FROM( Select id, [values] = CONVERT(xml, ’<root><v>’ + REPLACE([values], ‘,’, ‘</v><v>’) + ‘</v></root>’) FROM @t )A OUTER APPLY( Select value = N.v.value(‘.’, ‘varchar(100)’) FROM A.[values].nodes(‘/root/v’) N(v) )B /*–结果 id value ———– ——– 1 aa 1 bb 2 aaa 2 bbb 2 ccc (5 行受影响) –*/
转载于:https://www.cnblogs.com/Gaojier/archive/2010/04/08/2783577.html
相关资源:JAVA上百实例源码以及开源项目