萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> 數據庫使用技巧:SQL全角與半角切換

數據庫使用技巧:SQL全角與半角切換

數據庫系統中,經常有些用戶在輸入數據的時候會不小心使用全角輸入,這就有可能會導致我們的程序出錯,如何解決此類問題了。

測試代碼:

select cast('111' as int) as num1

select cast('111' as int) as num2

運行結果:

第一個正確顯示: 111

第二個則報錯: 在將 varchar 值 '111' 轉換成數據類型 int 時失敗。

下面使用自定義標量函數來解決這個問題:

if object_id(N'u_convert',N'FN') is not null
 drop   function u_convert
GO

轉換原理

全角字符unicode編碼從65281~65374

半角字符unicode編碼從33~126

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

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

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

like的時候,指定排序規則 COLLATE Latin1_General_BIN

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

*/  
create   function   u_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 
     begin 
       select   @pat=N'%[!-~]%',@step=-65248,  
       @str=replace(@str,N' ',N'   ')  
     end
    else  
     begin
       select   @pat=N'%[!-~]%',@step=65248,  
       @str=replace(@str,N'   ',N' ')  
     end
    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

測試語句:

關鍵詞:

copyright © 萬盛學電腦網 all rights reserved