全角/半角转换(收藏)

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   
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值