--分解字符串包含的信息值後然後合併到另外一表的信息
--(愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開) 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
sql替換語句
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.