全形 半形轉換 收藏

2021-09-05 16:27:34 字數 1640 閱讀 9252

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(n'[dbo].[f_convert]')   and   xtype   in   (n'fn',   n'if',   n'tf'))  

drop   function   [dbo].[f_convert]  

go  

/*--全形/半形轉換  

轉換說明  

全形字符從的unicode編碼從65281~65374  

半形字元從的unicode編碼從       33~126  

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

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

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

like的時候,指定排序規則   collate   latin1_general_bin  

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

(此函式部分思路參考了csdn上大力的轉換函式)  

--鄒建   2005.01(引用請保留此資訊)--*/  

/*--呼叫示例  

declare   @s1   varchar(8000)  

select   @s1='中    2-3456a78stuvabn中國opwxyz'  

select   dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)  

--*/  

create   function   f_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  

select   @pat=n'%[!-~]%',@step=-65248,  

@str=replace(@str,n' ',n'   ')  

else  

select   @pat=n'%[!-~]%',@step=65248,  

@str=replace(@str,n'   ',n' ')  

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   

全形 半形轉換 收藏

if exists select from dbo.sysobjects where id object id n dbo f convert and xtype in n fn n if n tf drop function dbo f convert go 全形 半形轉換 轉換說明 全形字符從的...

c 全形半形轉換

轉全形的函式 sbc case 任意字串 全形字串 全形空格為 12288 半形空格為 32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差 65248 public string tosbc string input if c i 127 c i char c i...

全形半形轉換函式

轉全形的函式 sbc case 任意字串 全形字串 全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 public string tosbc string input if c i 127 c i char c i 65...