1. 程式人生 > >SQL 全形和半形轉換

SQL 全形和半形轉換


ifobject_id(N'u_convert',N'FN'isnotnulldropfunction u_convert
GO/*
 轉換原理 
全形字元unicode編碼從65281~65374  
半形字元unicode編碼從33~126  
空格比較特殊,全形為 12288,半形為   32  
而且除空格外,全形/半形按unicode編碼排序在順序上是對應的  
所以可以直接通過用+-法來處理非空格資料,對空格單獨處理  
like的時候,指定排序規則   COLLATE   Latin1_General_BIN  
是保證字元順序按unicode編碼排序  

*/createfunction   u_convert(  
@strnvarchar(4000),   --要轉換的字串  @flagbit--轉換標誌,0轉換成半形,1轉換成全形  )
returnsnvarchar(4000)  
ASbegindeclare@patnvarchar(8),
          
@stepint,
          
@iint,
          
@spcintif@flag=0beginselect@pat=N'%[!-~]%',@step=-65248,  
       
@str=replace(@str,N'',N'')  
     
endelsebeginselect@pat=N'%[!-~]%',@step=65248,  
       
@str=replace(@str,N'',N'')  
     
endset@i=patindex(@pat   collate LATIN1_GENERAL_BIN,@str)  
    
while@i>0select@str=replace(@str,  
    
substring(
               
@str,@i,1), 
               
nchar(unicode(substring(@str,@i,1))+@step)),
               
@i=patindex(@pat   collate   LATIN1_GENERAL_BIN,@str
)  
     
return(@str)  
endGO