首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

-一个字符串截取有关问题-

2012-02-26 
------------一个字符串截取问题-------------------729从J075703(1400)&J074457(280)&J071234(280)转出72

------------一个字符串截取问题-------------------

729从J075703(1400)&J074457(280)&J071234(280)转出
728从J075703转出
729从J075703转出
721从J074457(160)&J075703(6560)转出
729从J075703(18480)转出
829从J076081(1080)&J075703(600)转出

在一个表某字段中有如上6行记录,这个记录中包含了很多 7 位长的编号。
现在我要将这些文本中的编号升级,升级为10位长的编号。

升级的规则是:从编号的右边开始找,找到不是数字的时候就加入三个零。

上面这六行记录升级后的结果应该如下:
729周从J000075703(1400)&J000074457(280)&J000071234(280)转出
728周从J000075703转出
729周从J000075703转出
721周从J000074457(160)&J000075703(6560)转出
729周从J000075703(18480)转出
829周从J000076081(1080)&J000075703(600)转出


  请问用SQL语句怎么实现啊???


[解决办法]
update tb
set col=replace(col,'J0','J0000')
[解决办法]
TRY:

SQL code
update 表 set 字段=replace(字段,'J','J000')
[解决办法]
探讨

升级的规则是:从编号的右边开始往左边找,找到第一个不是数字的时候就加入三个零。

[解决办法]
探讨
@liangCK
@libin_ftsafe
实际中的数据不一定全部是J0开头的哦。

@fcuandy
就是找到不是数字时,就在这个字母后面加上三个零。
如下例子:
729从Ja75703(1400)&Jy74457(280)&Jhh1234(280)转出
728从Jkkk003转出
------
升级后应该为(红色为升级加进去的三个0):
729从Ja00075703(1400)&Jy00074457(280)&Jhh0001234(280)转出
728从Jkkk000003转出

[解决办法]
需要写个函数或循环.
实现这个功能用正则的话,效率就差了.
[解决办法]
SQL code
--创建函数:create function wsp(@sql varchar(8000))returns @val varchar(8000)begin    set @val=''    while(charindex('从',@sql)>0 or charindex('&',@sql)>0 )    begin        if(charindex('从',@sql)<charindex('&',@sql) and charindex('从',@sql)>0)        begin            set @val=@val+left(@sql,charindex('从',@sql))            set @sql=substring(@sql,charindex('从',@sql)+1,len(@sql))            set @sql=stuff(@sql,patindex('%[0-9]%',@sql),0,'000')        end        else        begin            set @val=@val+left(@sql,charindex('&',@sql))            set @sql=substring(@sql,charindex('&',@sql)+1,len(@sql))            set @sql=stuff(@sql,patindex('%[0-9]%',@sql),0,'000')        end    end    return @val+@sqlend--调用函数修改:update 表名 set 字段=dbo.wsp(字段)
[解决办法]

热点排行