日期:2014-05-18 浏览次数:20501 次
create table aa(id,str) insert aa values (1,'a,d,c,f') insert aa values (2,'f,a')
declare @aa table(id int ,str varchar(20))
insert @aa values (1,'a,d,c,f')
insert @aa values (2,'f,a')
;
WITH T
AS
(
SELECT top 26 ROW_NUMBER() OVER (ORDER BY ID) AS n
FROM SYS.SYSOBJECTS
),
T2
AS
(
SELECT str,CHAR(64+N) AS M,N
FROM @aa JOIN T
ON CHARINDEX(CHAR(64+N),str) > 0
)
SELECT
str,
replace(
(SELECT M as [data()] FROM T2 WHERE str = T3.str ORDER BY N FOR XML PATH('')
),' ',',') AS newstr
FROM @aa T3
/*
str newstr
-------------------- ------------
a,d,c,f A,C,D,F
f,a A,F
*/
------解决方案--------------------
declare @aa table(id int ,str varchar(20))
insert @aa values (1,'a,d,c,f')
insert @aa values (2,'f,a')
;with t as
(
select [az]=char(number)
from master..spt_values
where type='p' and number between 97 and 122
),t1 as
(
select a.id,t.az
from t,@aa a
where charindex(az,str)>0
)
select id,stuff((select ','+az from t1 where id=a.id order by az for xml path('')),1,1,'') newstr
from t1 a
group by id
/*
id newstr
----------- ----------------
1 a,c,d,f
2 a,f
*/
------解决方案--------------------
create table aa(id int ,str varchar(1000))
insert aa values (1,'a,d,c,f')
insert aa values (2,'f,a')
insert aa values(3,'aaaa,呵呵,哈哈,123')
go
create function f_test(@str varchar(8000))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret=''
declare @s xml
select @s=cast('<item><S>'+replace(@str,',','</S></item><item><S>')+'</S></item>' as xml)
declare @tb table(str varchar(8000))
select @ret=@ret+','+str from (select A.x.value('S[1]','varchar(8000)') as str
from @s.nodes('//item')AS A(x))t order by str
return right(@ret,len(@ret)-1)
end
go
select *,dbo.f_test(str) from aa
go
drop function f_test
drop table aa
/*
1 a,d,c,f a,c,d,f
2 f,a a,f
3 aaaa,呵呵,哈哈,123 123,aaaa,哈哈,呵呵
*/