首先我們來看乙個測試**:
select
cast('
111'
asint
) as
num1
code
ifobject_id(n'
u_convert',n
'fn')
isnot
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,
@iint
,@spc
intif
@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>
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
測試語句:
select dbo.u_convert('11',1) as [a],'11' as [b],dbo.u_convert('111',0) as [c]
C 全形和半形轉換
在計算機螢幕上,乙個漢字要佔兩個英文本元的位置,人們把乙個英文本元所佔的位置稱為 半形 相對地把乙個漢字所佔的位置稱為 全形 在漢字輸入時,系統提供 半形 和 全形 兩種不同的輸入狀態,但是對於英文本母 符號和數字這些通用字元就不同於漢字,在半形狀態它們被作為英文本元處理 而在全形狀態,它們又可作為...
字元轉換 全形和半形轉換
在我們使用搜狗輸入法的時候會有全形和半形的切換,首先看一下這兩者的區別吧 全形,指乙個字元占用兩個標準字元位置的狀態,也是排字的度量單位,寬度等於所使用的文字的磅數漢。半形,即乙個字元占用乙個標準字元的位置,排字的量度單位,寬度等於同一磅數全形的一半。全形和半形的使用 1 在中文輸入法中,切換全形和...
全形字符轉換為半形,判斷半形和全形
判斷字元是否英文半形字元或標點 32 空格 33 47 標點 48 57 0 9 58 64 標點 65 90 a z 91 96 標點 97 122 a z 123 126 標點 public static bool isbjchar char c 判斷字元是否全形字符或標點 全形字符 65248...