以下是函数的创建
有几个问题不明白
- SQL code
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'%[!-~]%', //这里的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))[email protected])) ,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str) RETURN(@str) END GO
这里的N 是什么意思? %[!-~]% 是什么意思?
求解释 !-~是指的unicode码是从!开始到~结束吗?查了一下好像不是啊
------解决方案--------------------
%[!-~]% 指的是类似于 !-~的字符
------解决方案--------------------
- SQL code
是範圍大小關系如下 select top 94 n=identity(tinyint,33,1) into #1 from syscolumns select nchar(n+65248) AS 全角 ,char(n) AS 半角 from #1 /*全角 半角! !" "# #$ $% %& &' '( () )* *+ +, ,- -. ./ /0 01 12 23 34 45 56 67 78 89 9: :; ;< <= => >? ?@ @A AB BC CD DE EF FG GH HI IJ JK KL LM MN NO OP PQ QR RS ST TU UV VW WX XY YZ Z[ [\ \] ]^ ^_ _` `a ab bc cd de ef fg gh hi ij jk kl lm mn no op pq qr rs st tu uv vw wx xy yz z{ {| |} }~ ~*/