举例表结构Tab1 (字段1和字段2都是char类型,长度都为30)字段1 字段2
001 002 003 abc efg(001,002,003后面是7个空格,字段2的值也是一样,就是每一项占10个char,共有3项,每一项都可以为空即10个空格 ) Tab2
字段1 字段2
001 红
002 篮
002 绿
我想要的结果红abc 篮efg 绿原来Tab1没有字段2的时候我已经做出来了,后来加了字段二就不知道怎么办了。
谢谢。
001 002 003 abc efg(001,002,003后面是7个空格,字段2的值也是一样,就是每一项占10个char,共有3项,每一项都可以为空即10个空格 ) Tab2
字段1 字段2
001 红
002 篮
002 绿
我想要的结果红abc 篮efg 绿原来Tab1没有字段2的时候我已经做出来了,后来加了字段二就不知道怎么办了。
谢谢。
insert into tab1(字段1,字段2)
select '001'+space(7)+'002'+space(7)+'003'+space(7),'abc'+space(7)+'efg'+space(7)
create table tab2(字段1 char(3),字段2 char(2))
insert into tab2(字段1,字段2)
select '001','红'
union all select '002','篮'
union all select '003','绿'update tab1
set 字段1=replace(字段1,' ',','),
字段2=replace(字段2,' ',',')create function uf_splitstring
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @retab table(istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str<>'' insert into @retab values(@str)
return
endcreate function uf_returnstr(@col1 char(30),@col2 char(30))
returns varchar(1000)
as
begin
declare @str varchar(1000)
set @str=''
declare @t1 table(id int identity(1,1),col varchar(10))
declare @t2 table(id int identity(1,1),col varchar(10))
insert into @t1(col)
select istr from dbo.uf_splitstring(@col1,',')
insert into @t2(col)
select istr from dbo.uf_splitstring(@col2,',')
update a
set a.col=isnull(b.字段2,'')+isnull(c.col,'')+' '
from @t1 a
inner join tab2 b on ltrim(rtrim(a.col))=b.字段1
left join @t2 c on a.id=c.id
select @str=@str+col from @t1
return @str
end--调用
select dbo.uf_returnstr(字段1,字段2) from tab1--结果
----------------------------------------------------------------
红abc 篮efg 绿 (所影响的行数为 1 行)
select c.字段2+t.b as result
from (
select left(字段1,10) as a,left(字段2,10) as b from tab1
union all
select substring(字段1,11,10) as a,left(字段2,11,10) as b from tab1
union all
select substring(字段1,21,10) as a,left(字段2,21,10) as b from tab1
) as t,tab2 c
where t.a=c.字段1
declare @r varchar(200)
set @r=''select @r=@r+c.字段2+t.b as result
from (
select left(字段1,10) as a,left(字段2,10) as b from tab1
union all
select substring(字段1,11,10) as a,left(字段2,11,10) as b from tab1
union all
select substring(字段1,21,10) as a,left(字段2,21,10) as b from tab1
) as t,tab2 c
where t.a=c.字段1select @r as result
不可以改变原来tab1的值,而且字段1不一定是3个char,其长度是不大于10的char.
to rea1gz(冒牌realgz V0.3)
我只是举例,实际上是有10项,这样union all起来有点不好吧。
-----------------------------------------------------------------------
那你就加上
alter table tab1 add 字段11 char(30)
alter table tab1 add 字段22 char(30)
--调用
select dbo.uf_returnstr(字段11,字段22) from tab1和有几项没关系.都可以