SqlServer替换全角空格的探索

工作环境是SqlServer2008,在地址处理的时候发现有些地址的空格用replace无法替换,把地址文本用16进制查看,原来是C2A0,网上搜索了一下,是全角空格,就是那个&nbsp,再搜索一下替换的方法也没找到,只有自己想办法了。

用Convert(varbinary(max),Address),发现这个全角空格对应的值是3F,而普通空格对应的值是20,参考网上提取16进制值的程序修改了个替换的函数,结果替换成功。

CREATE Function [dbo].[HexReplace](@string_expression Varchar(max),@search_pattern varchar(2),@replace_pattern varchar(2))
returns varchar(max)
as
begin
  declare @i int,@Asi int,@ModS int,@res varchar(max),@Len int,@Cres varchar(4),@tempstr varbinary(max)
  select @i = 1,@res='',@len=datalength(@string_expression),@tempStr = CONVERT(varbinary(max),@string_expression)
  while @i<=@len 
  begin
     Select @Asi = substring(@tempstr,1,1),@Cres=''
     while @Asi <> 0
     begin
       select @Mods = @Asi %16,
       @Cres=Case when (@Mods > 9) then Char(Ascii('A')+@Mods-10)+@Cres else Cast(@Mods as varchar(4)) + @Cres end,
       @Asi = @Asi/16
       if @search_pattern=@Cres set @Cres=@replace_pattern
     end 
     Select @res = @res + @Cres,@tempStr =  substring(@tempStr,2,@len-1),@i = @i+1  
  end
  return CONVERT(varchar(max),CONVERT(VARBINARY(max),@res,2))
end

替换为普通空格: select dbo.HexReplace(Address,'3F','20')

如果有更好的处理方法,欢迎交流指教。

函数的编写参考了以下文章https://www.cnblogs.com/DxSoft/p/1638057.html

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值