SQL text类型字段字符替换

 /*drop table test*/

  create   table   test(info_id   int,info_content   text)  

  insert   into   test  

  select   info_id,info_content from info_table/* where info_id = 3620*/

  go  

  select   datalength(info_content),*   from   test  

   

  --定义替换的字符串  

  declare   @s_str   varchar(8000),@d_str   varchar(8000)  

  select   @s_str='http://10.1.192.156:1357/'   --要替换的字符串  

  ,@d_str='http://www.5925car.com/' --替换成的字符串  

   

   

  --因为只能用patindex,所以对于搜索字符串做处理  

  set   @s_str='%'+@s_str+'%'  

   

  --定义游标,循环处理数据  

  declare   @id   int 

  declare   #tb   cursor   for   select   info_id   from   test  

  open   #tb  

  fetch   next   from   #tb   into   @id  

  while   @@fetch_status=0  

  begin  

  --字符串替换处理  

  declare   @p   varbinary(16)  

  ,@p1   int,@p2   int  

  ,@rplen   int,@step   int,@len   int  

   

  select   @p=textptr(info_content)  

  ,@rplen=len(@s_str)-2  

  ,@step=len(@d_str)  

  ,@p1=patindex(@s_str,info_content)  

  ,@len=datalength(info_content)  

  ,@p2=0  

  from   test   where   info_id=@id  

   

  while   @p1>0  

  begin  

  set   @p2=@p1+@p2-1  

  updatetext   test.info_content   @p   @p2   @rplen   @d_str  

  select   @p2=@p2+1,@p1=patindex(@s_str,substring(info_content,@p2+1,@len))  

  from   test   where   info_id=@id  

  end  

  fetch   next   from   #tb   into   @id  

  end  

  close   #tb  

  deallocate   #tb  

   

  --显示结果  

  select   datalength(info_content),*   from   test  

  update info_table set info_content = b.info_content from info_table a inner join

                                              test b

                                         on a.info_id = b.info_id

  go  

  --删除数据测试环境  

  drop   table   test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值