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...