sql替換語句

--分解字符串包含的信息值後然後合併到另外一表的信息
--
(愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開)  2007-12-23  廣東深圳)

/*問題描述
tba
ID  classid   name
1     1,2,3   西服
2     2,3     中山裝
3     1,3     名褲
tbb
id   classname
1     衣服
2     上衣
3     褲子

我得的結果是
id   classname            name
1     衣服,上衣,褲子      西服
2     上衣,褲子          中山裝
3     衣服,褲子          名褲
*/

-----------------------------------------------------
--
sql server 2000中的寫法
create table tba(ID int,classid varchar(20),name varchar(10))
insert into tba values(1,'1,2,3','西服')
insert into tba values(2,'2,3'  ,'中山裝')
insert into tba values(3,'1,3'  ,'名褲')
create table tbb(ID varchar(10), classname varchar(10))
insert into tbb values('1','衣服')
insert into tbb values('2','上衣')
insert into tbb values('3','褲子')
go

--第1種方法,創建函數來顯示
create function f_hb(@id varchar(10))
returns varchar(1000)
as
begin
 
declare @str varchar(1000)
 
set @str=''
 
select @str=@str+','+[classname] from tbb where charindex(','+cast(id as varchar)+',',','+@id+',')>0
 
return stuff(@str,1,1,'')
end
go
select id,classid=dbo.f_hb(classid),name from tba
drop function f_hb
/*
id          classid       name      
----------- ------------- ----------
1           衣服,上衣,褲子 西服
2           上衣,褲子      中山裝
3           衣服,褲子      名褲
(所影響的行數爲 3 行)
*/

--第2種方法.update
while(exists (select * from tba,tbb where charindex(tbb.id,tba.classid) >0))
update tba
set classid= replace(classid,tbb.id,tbb.classname)
from tbb
where charindex(tbb.id,tba.classid)>0
select * from tba
/*
ID          classid              name      
----------- -------------------- ----------
1           衣服,上衣,褲子       西服
2           上衣,褲子            中山裝
3           衣服,褲子            名褲
(所影響的行數爲 3 行)
*/
drop table tba,tbb

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章