日期:2014-05-17  浏览次数:20570 次

SQL语句的执行~~~~~~~在线等!!!!!!!
一个表中仅有一个字段(一行一列),内容如下:
2012082022110036,2012082022110037,2012082022110038,2012082022110039,2012082022110040

想通过SQL语句得到以下结果:
2012082022110036
2012082022110037
2012082022110038
2012082022110039
2012082022110040
(五行一列)

有没有什么好办法??
注:每个字符串的长度一样

------解决方案--------------------
SQL code
declare @three table
(yh varchar(200))

insert into @three
select'2012082022110036,2012082022110037,2012082022110038,2012082022110039,2012082022110040'


select 
substring(','+a.yh,b.number+1,charindex(',',a.yh+',',b.number)-b.number) 'yh'
from @three a
inner join master.dbo.spt_values b
on b.[type]='P' and 
substring(','+a.yh,b.number,1)=','

/*
yh
2012082022110036
2012082022110037
2012082022110038
2012082022110039
2012082022110040
*/

------解决方案--------------------
SQL code
if object_id('test') is not null drop table test
go
create table test(f1 varchar(20))
go
insert into test
select '2012082022110036' union all
select '2012082022110037' union all
select '2012082022110038' union all
select '2012082022110039' union all
select '2012082022110040'
go

--sql server 2000
declare @str varchar(200)
select @str=isnull(@str+',','')+f1 from test 
select @str

--sql server 2005以后版本 
select stuff(','+f1,1,1,'') from test for xml path('')

------解决方案--------------------
SQL code
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO 
CREATE TABLE [tb]([name] VARCHAR(800))
INSERT [tb]
SELECT '2012082022110036,2012082022110037,2012082022110038,2012082022110039,2012082022110040' UNION ALL
SELECT '2012082022110041,2012082022110042,2012082022110043,2012082022110044,2012082022110045'
--------------开始查询--------------------------


SELECT T.c.value('.', 'sysname')  AS NAME 
FROM (SELECT CONVERT(XML,'<x>'+REPLACE([name],',','</x><x>')+'</x>') AS [name] FROM [tb]) A 
CROSS APPLY A.name.nodes('/x/text()') T(c)
/*
NAME
--------------------------------------------------------
2012082022110036
2012082022110037
2012082022110038
2012082022110039
2012082022110040
2012082022110041
2012082022110042
2012082022110043
2012082022110044
2012082022110045

(10 行受影响)
*/

------解决方案--------------------
SQL code
/****************************************************************************************************************************************************** 
合并分拆表数据 

整理人:中国风(Roy) 

日期:2008.06.06 
******************************************************************************************************************************************************/ 

--> --> (Roy)生成測試數據 

if not object_id('Tab') is null 
    drop table Tab 
Go 
Create table Tab([Col1] int,[Col2] nvarchar(1)) 
Insert Tab 
select 1,N'a' union all 
select 1,N'b' union all 
select 1,N'c' union all 
select 2,N'd' union all 
select 2,N'e' union all 
select 3,N'f' 
Go 

合并表: 

SQL2000用函数: 

go 
if object_id('F_Str') is not null 
    drop function F_Str 
go 
create function F_Str(@Col1 int) 
returns nvarchar(100) 
as 
begin 
    declare @S nvarchar(100) 
    select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1 
    return @S 
end 
go 
Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab 

go 

SQL2005用XML: 

方法1: 

select 
    a.Col1,Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'') 
from 
    (select distinct COl1 from Tab) a 
Cross apply 
    (select COl2=(select N','+Col2 from Tab where Col1=a.COl1 For XML PATH(''), ROOT('R'), TYPE))b 

方法2: 

select 
    a.Col1,COl2=replace(b.Col2.value('/Tab[1]','nvarchar(max)'),char(44)+char(32),char(44)) 
from 
    (select distinct COl1 from Tab) a 
cross apply 
    (select Col2=(select COl2 from Tab  where COl1=a.COl1 FOR XML AUTO, TYPE) 
                .query(' <Tab> 
                {for $i in /Tab[positio