一个表中某个字段的内容如下,存在多个并列的ID, 且分隔符有两种,前两天问过一个是单一分隔符的问题,大家帮助解答了,我是用的下面贴的那个方法,但是这种两个或多个分隔符的我就不知道怎么弄了。还得请大家帮助解答,因为我现在的程序还达不到举一反三的水平呀。
11,22,33|12,23
11
11|22
2,3
这些ID的属性表为:
ID
11 月
22 年
33 家
12 六
23 五
我希望得到的效果是:(将ID转换为对应的值)
月,年,家,六,五
月
月,年
-----------
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 衣服,裤子 名裤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 行)
*/
11,22,33|12,23
11
11|22
2,3
这些ID的属性表为:
ID
11 月
22 年
33 家
12 六
23 五
我希望得到的效果是:(将ID转换为对应的值)
月,年,家,六,五
月
月,年
-----------
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 衣服,裤子 名裤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 行)
*/
create table os(val varchar(50))
insert into os select '11,22,33|12,23'
insert into os select '11'
insert into os select '11|22'
insert into os select '2,3'create table p(id int,name varchar(10))
insert into p select 11,'月'
insert into p select 22,'年'
insert into p select 33,'家'
insert into p select 12,'六'
insert into p select 23,'五'alter function f_hb(@val varchar(50))
returns varchar(1000)
as
begin
declare @str varchar(1000)
select @str=isnull(@str+',','')+name from p where charindex(','+ltrim(id)+',',','+@val+',')> 0
or charindex('|'+ltrim(id)+'|','|'+@val+'|')> 0
or charindex(','+ltrim(id)+'|',','+@val+'|')> 0
or charindex('|'+ltrim(id)+',','|'+@val+',')> 0
return @str
end select dbo.f_hb(val) from os