SqlServer替换全角空格的探索

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

用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

你可能感兴趣的:(sqlserver,数据库)