SQL 全形轉半形

2021-06-04 01:21:26 字數 1707 閱讀 5179

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(n'[dbo].[f_convert]')   and   xtype   in   (n'fn',   n'if',   n'tf'))   

drop   function   [dbo].[f_convert]   

go   

/*--全形/半形轉換   

轉換說明   

全形字符從的unicode編碼從65281~65374   

半形字元從的unicode編碼從     33~126   

空格比較特殊,全形為   12288,半形為   32   

而且除空格外,全形/半形按unicode編碼排序在順序上是對應的   

所以可以直接通過用+-法來處理非空格資料,對空格單獨處理   

like的時候,指定排序規則   collate   latin1_general_bin   

是保證字元順序按unicode編碼排序  

declare   @s1   varchar(8000)   

select   @s1='中    2-3456a78stuvabn中國opwxyz'   

select   dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)   

*/   

create   function   f_convert(   

@str   nvarchar(4000),   --要轉換的字串   

@flag   bit                 --轉換標誌,0轉換成半形,1轉換成全角   

)returns   nvarchar(4000)   

as   

begin   

declare   @pat   nvarchar(8),@step   int,@i   int,@spc   int   

if   @flag=0   

select   @pat=n'%[!-~]%',@step=-65248,   

@str=replace(@str,n' ',n'   ')   

else   

select   @pat=n'%[!-~]%',@step=65248,   

@str=replace(@str,n'   ',n' ')   

set   @i=patindex(@pat   collate   latin1_general_bin,@str)   

while   @i>0   

select   @str=replace(@str,   

substring(@str,@i,1),   

nchar(unicode(substring(@str,@i,1))+@step))   

,@i=patindex(@pat   collate   latin1_general_bin,@str)   

return(@str)   

end   

go  

----應用

select  dbo.f_convert(欄位1,0) as 欄位名1, dbo.f_convert(欄位2,0)as 欄位名2,... into 目的表名

from 原表名

---注:欄位太多的話,速度會挺慢的。

---如果是純數字的就直接replace掉。

全形轉半形 半形轉全形(Python)

coding utf 8 def str q2b u string 全形轉半形 全形字符unicode編碼從65281 65374 十六進製制 0xff01 0xff5e 半形字元unicode編碼從33 126 十六進製制 0x21 0x7e 空格比較特殊,全形為 12288 0x3000 半形為...

全形轉半形與半形轉全形

1.全形 指乙個字元占用兩個標準字元位置。漢字字元和規定了全形的英文本元及國標gb2312 80中的圖形符號和特殊字元都是全形字符。一般的系統命令是不用全形字符的,只是在作文書處理時才會使用全形字符。2.半形 指一字元占用乙個標準的字元位置。通常的英文本母 數字鍵 符號鍵都是半形的,半形的顯示內碼都...

全形轉半形

轉半形的函式 dbc case 全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 param input 任意字串 return 半形字串 public static string todbc string input ...