某表中有一字段(FILED)存储内容格式为:内容1;内容2;内容3;内容4;......。
我现在想通过SQL语句查询出来的结果为多行单列,如下:
字段名(FILED)
内容1
内容2
内容3
内容4
......
请问可不可以实现呢,该怎样去写呢?
------解决思路----------------------
SELECT V FROM如果你还有其他列,不知道怎么改再说哈
(SELECT CONVERT(XML,'<V>'+REPLACE(FILED,';','</V><V>')+'</V>')VS FROM TB)T1
CROSS APPLY(SELECT N.V.value('.','NVARCHAR(50)')V FROM T1.VS.nodes('//V')N(V))T2
------解决思路----------------------
Select
a.Col1,Col1=substring(a.Col1,b.number,charindex(',',a.Col1+',',b.number)-b.number)
from
Tab a,master.dbo.spt_values b
where
charindex(',',','+a.Col1,b.number)=b.number AND b.type='P'
------解决思路----------------------
改一下分隔符为";"
Select
a.Col1,Col1=substring(a.Col1,b.number,charindex(';',a.Col1+';',b.number)-b.number)
from
Tab a,master.dbo.spt_values b
where
charindex(';',',;'+a.Col1,b.number)=b.number AND b.type='P'
------解决思路----------------------
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#tableA') is null
drop table #tableA
Go
Create table #tableA([Col1] nvarchar(50))
Insert #tableA
select N'内容1;内容2;内容3;内容4;内容5'
Go
Select
Col1=substring(a.Col1,b.number,charindex(';',a.Col1+';',b.number)-b.number)
from
#tableA a,master.dbo.spt_values b
where
charindex(';',',;'+a.Col1,b.number)=b.number AND b.type='P'
/*
容1
容2
容3
容4
容5
*/
------解决思路----------------------
还有一种不需要XML的写的,版主已贴...
另外也可以,直接用动态@SQL处理
------解决思路----------------------
几天没来论坛,现在改版了,等级都变了
------解决思路----------------------
与上楼同感,是不是换领导了
------解决思路----------------------
长度不够生成个临时表,或创建表处理,这样分拆比用XML性能要高
如:
select TOP 10000
number=IDENTITY(int,1,1)
INTO 辅助表
from syscolumns as a,syscolumns as b,syscolumns AS c,syscolumns AS d