SQL將全角轉半角

--第一步:執行以下語句
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   


--第二步:查詢表


select dbo.f_Convert(字段,0) from T1
如果要保存的話
select  dbo.f_convert(字段1,0) as 字段名1, dbo.f_convert(字段2,0)as 字段2,...

into 目的表名from 原表名


var:http://blog.csdn.net/b330225/article/details/7659383


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章