我数据库中有些数据是全角数据的,这样的数据如何检索呢?

解决方案 »

  1.   

    NVarchar存的是unicode编码字符,用这个存放信息应该可以的吧
      

  2.   

    DECLARE @a TABLE(a nvarchar(20))INSERT @a SELECT '成,功的人啊'
    INSERT @a SELECT '成,功的人'
    SELECT * FROM @a WHERE a LIKE '%,%' COLLATE Chinese_PRC_CI_AS_WS--result
    /*a                    
    -------------------- 
    成,功的人啊(所影响的行数为 1 行)*/
      

  3.   

    全角字符的ascii值大于某个值(具体那个不清楚,可以查查),然后判断.
      

  4.   

    看看以前老大写的....
    http://topic.csdn.net/t/20050419/10/3948336.html
    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   
      

  5.   

    like 好像支持全角半角检索,contains好像不支持.