关闭

/*--全角/半角转换

372人阅读 评论(0) 收藏 举报

/*--全角/半角转换  
   
  转换说明  
  全角字符从的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  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:90206次
    • 积分:1628
    • 等级:
    • 排名:千里之外
    • 原创:74篇
    • 转载:1篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论