哎呀,可能没有说清楚:
现在表结构:
xh,cj1m,cj1,cj2m,cj2,cj
---------
1,null,null,null,null,①101英语②239语文
2,null,null,null,null,①101英语②221数学需要转化为
表:
xh,cj1m,cj1,cj2m,cj2,cj
---------
1,101,英语,239,语文,①101英语②239语文
2,101,英语,221,数学,①101英语②221数学不知道这样是不是清楚一点阿,
现在表结构:
xh,cj1m,cj1,cj2m,cj2,cj
---------
1,null,null,null,null,①101英语②239语文
2,null,null,null,null,①101英语②221数学需要转化为
表:
xh,cj1m,cj1,cj2m,cj2,cj
---------
1,101,英语,239,语文,①101英语②239语文
2,101,英语,221,数学,①101英语②221数学不知道这样是不是清楚一点阿,
怎么没人哩我呢?
To:zheninchangjiang(我爱燕子)
成绩表@@
??我只是用了一个例子,其实是别的表的,只不过用了一下这个名称。
"①101英语②239语文"这个字符串不知道怎么去拆阿
你可以
update 表 set cjlm=substring(cj,2,3),cjl=substring(cj,5,2),cj2m=substring(cj,8,3),cj2=substring(cj,11,2)
create function dbo.f_1(@s varchar(100),@n int)
returns varchar(100)
as
begin
declare @s1 varchar(100),@s2 varchar(100),@s3 varchar(100),@s4 varchar(100)
select @s1='',@s2=substring(@s,2,charindex('②',@s)-2)
while left(@s2,1)>='0' and left(@s2,1)<='9'
begin
set @s1=@s1+left(@s2,1)
set @s2=stuff(@s2,1,1,'')
end
select @s3='',@s4=stuff(@s,1,charindex('②',@s),'')
while left(@s4,1)>='0' and left(@s4,1)<='9'
begin
set @s3=@s3+left(@s4,1)
set @s4=stuff(@s4,1,1,'')
end
return case @n when 1 then @s1 when 2 then @s2 when 3 then @s3 when 4 then @s4 end
end
go
--再调用:
update t set cj1m=dbo.f_1(cj,1),cj1=dbo.f_1(cj,2),cj2m=dbo.f_1(cj,3),cj2=dbo.f_1(cj,4)
To:pbsql(风云)
能给个注释么?我看的有点难度啊,charindex和stuff函数是做什么用的?谢谢
例如 select charindex('A','BBBACBXA')
它返回的数是4,是说A字符在'BBBACBXA'字符窜里的第一次出现在第4个字符上,
charindex 还有一个参数 例如select charindex('A','BBBACBXA',5)
返回值是8 ,是A字符在在'BBBACBXA'字符窜里从第5位开始搜索的第一个A出现在第8个字符上stuff 是用字符替换原字符窜函数
例如 select stuff('abcde',1,2,'kkkkk')
结果是kkkkkcde 是从字符窜'abcde'里的第一个字符取掉2个字符替换成红面的字符'kkkkk'
明白了!:)