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編碼排序
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
----應用
select dbo.f_convert(欄位1,0) as 欄位名1, dbo.f_convert(欄位2,0)as 欄位名2,... into 目的表名
from 原表名
---注:欄位太多的話,速度會挺慢的。
---如果是純數字的就直接replace掉。
全形轉半形 半形轉全形(Python)
coding utf 8 def str q2b u string 全形轉半形 全形字符unicode編碼從65281 65374 十六進製制 0xff01 0xff5e 半形字元unicode編碼從33 126 十六進製制 0x21 0x7e 空格比較特殊,全形為 12288 0x3000 半形為...
全形轉半形與半形轉全形
1.全形 指乙個字元占用兩個標準字元位置。漢字字元和規定了全形的英文本元及國標gb2312 80中的圖形符號和特殊字元都是全形字符。一般的系統命令是不用全形字符的,只是在作文書處理時才會使用全形字符。2.半形 指一字元占用乙個標準的字元位置。通常的英文本母 數字鍵 符號鍵都是半形的,半形的顯示內碼都...
全形轉半形
轉半形的函式 dbc case 全形空格為12288,半形空格為32 其他字元半形 33 126 與全形 65281 65374 的對應關係是 均相差65248 param input 任意字串 return 半形字串 public static string todbc string input ...