SQL 全形和半形轉換
阿新 • • 發佈:2019-02-19
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(
returnsnvarchar(4000)
ASbegindeclare@patnvarchar(8),
@stepint,
@iint,
@spcintif@flag=0beginselect@pat=N'%[!-~]%',@step=-65248,
@str=replace(@str,N'',N'')
endelsebeginselect@pat=N'%[!-~]%',@step=65248,
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