CREATE FUNCTION f_Convert(
@str VARCHAR(max), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)RETURNS varchar(max)
AS
BEGIN
DECLARE @pat nvarchar(8),@step int,@i int,@spc int
IF @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> 0
begin
SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
select @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
end
RETURN(@str)
END
--调用:
--update table1 set column1=dbo.f_Convert(column1,0);
---------------转换2------------------------
/***********************************************************************
--名称: CONVERT_BJ_QJ
--描述: 通过对字段进行半角转全角处理。
--参数: @TITLE 输入值 cgenius的NEWS_MAIN.TITLE
--返回: int
--创建:
--历史:
*************************************************************************/
CREATE FUNCTION dbo.FN_CONVERT_BJ_QJ (@STR VARCHAR(1000))
RETURNS VARCHAR(256) as
BEGIN
DECLARE @STR_OUT VARCHAR(256)
SET @STR_OUT=CASE WHEN @STR collate Chinese_PRC_CS_AS_WS like '%--%' THEN replace(@STR, '--', '--')
WHEN @STR collate Chinese_PRC_CS_AS_WS like '%:%' THEN replace(@STR, ':', ':')
WHEN @STR collate Chinese_PRC_CS_AS_WS like '%,%' THEN replace(@STR, ',', ',')
WHEN @STR collate Chinese_PRC_CS_AS_WS like '%<<%' THEN replace(@STR, '<<', '《')
WHEN @STR collate Chinese_PRC_CS_AS_WS like '%>>%' THEN replace(@STR, '>>', '》')
ELSE @STR
END
RETURN @STR_OUT
END