資料庫使用技巧――SQL 全形與半形切換 | sql移除全形空白
資料庫系統中,經常有些使用者在輸入資料的時候會不小心使用全形輸入,這就有可能會導致我們的程式出錯,如何解決此類問題了。測試程式碼:selectcast(111asint)asnum1selectcast(111asint)asnum2執行結果:第一個正確顯示:111第二個則報錯:在將varchar值111轉換成資料型別int時失敗。下面使用自定義標量函式來解決這個問題: ifobject_id(Nu_convert,NFN)isnotnull drop functionu_convertGO轉換原理全形字元unicode編碼從65281~65374半形字元unicode編碼從33~126空格比較特殊,全形為12288,半形為32而且除空格外,全形/半形按...
資料庫系統中,經常有些使用者在輸入資料的時候會不小心使用全形輸入,這就有可能會導致我們的程式出錯,如何解決此類問題了。
測試程式碼:
select cast(111 as int) as num1
select cast(111 as int) as num2
執行結果:
第一個正確顯示: 111
第二個則報錯: 在將 varchar 值 111 轉換成資料型別 int 時失敗。
下面使用自定義標量函式來解決這個問題:
if object_id(Nu_convert,NFN) is not null drop function u_convertGO
轉換原理
全形字元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%[!-~]%...