if exists(select * from sysobjects where name = 'F_Ctofchar')
drop function F_Ctofchar
go
Create FUNCTION [dbo].[F_Ctofchar](
@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
测试:
declare @str varchar(10)
set @str = '123'
print @str
exec @str = F_Ctofchar @str, 0
print @str
create table #t(a varchar(10))
insert into #t values('123')
insert into #t values('456')
insert into #t values('789')
insert into #t values('234')
insert into #t values('678')
update #t set a = dbo.F_Ctofchar(a, 0)
select * from #t