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
--第二步:查詢表
select dbo.f_Convert(字段,0) from T1
如果要保存的話
select dbo.f_convert(字段1,0) as 字段名1, dbo.f_convert(字段2,0)as 字段2,...
into 目的表名from 原表名
var:http://blog.csdn.net/b330225/article/details/7659383