有以下记录 
id   name
011   1
add   2
cdd   3
苏ee  4现在要查询出以上记录,select * from [table] where id between p1 and p2
如果我想查询出所有记录,p2要赋什么值?(主要是有一个id带汉字的)

解决方案 »

  1.   

    就像 select * from [table] where id between '' and 'zzzzzz'
     但是有汉字的id出不来
      

  2.   

    我用 select * from [table] where id between '' and 'zzzzzz'
    只能查出
    011 1
    add 2
    cdd 3这条出不来(苏ee 4)
      

  3.   

    --写个函数 --求汉字拼音首字母的函数。如下:   
        
      create   function   fun_getPY(@str   nvarchar(4000))   
      returns   nvarchar(4000)   
      as   
      begin   
      declare   @word   nchar(1),@PY   nvarchar(4000)   
      set   @PY=''   
      while   len(@str)>0   
      begin   
      set   @word=left(@str,1)   
      --如果非汉字字符,返回原字符   
      set   @PY=@PY+(case   when   unicode(@word)   between   19968   and   19968+20901   
      then   (select   top   1   PY   from   (   
      select   'A'   as   PY,N'驁'   as   word   
      union   all   select   'B',N'簿'   
      union   all   select   'C',N'錯'   
      union   all   select   'D',N'鵽'   
      union   all   select   'E',N'樲'   
      union   all   select   'F',N'鰒'   
      union   all   select   'G',N'腂'   
      union   all   select   'H',N'夻'   
      union   all   select   'J',N'攈'   
      union   all   select   'K',N'穒'   
      union   all   select   'L',N'鱳'   
      union   all   select   'M',N'旀'   
      union   all   select   'N',N'桛'   
      union   all   select   'O',N'漚'   
      union   all   select   'P',N'曝'   
      union   all   select   'Q',N'囕'   
      union   all   select   'R',N'鶸'   
      union   all   select   'S',N'蜶'   
      union   all   select   'T',N'籜'   
      union   all   select   'W',N'鶩'   
      union   all   select   'X',N'鑂'   
      union   all   select   'Y',N'韻'   
      union   all   select   'Z',N'咗'   
      )   T     
      where   word>=@word   collate   Chinese_PRC_CS_AS_KS_WS     
      order   by   PY   ASC)   else   @word   end)   
      set   @str=right(@str,len(@str)-1)   
      end   
      return   @PY   
      end   
    --再试试
    select * from 
    (select N'011' id, '1'name union all
    select N'add',' 2' union all
    select N'cdd',' 3' union all
    select N'苏ee',' 4') t
    where dbo.fun_getPY (id) between '' and 'zzz'
    /*
    id   name 
    ---- ---- 
    011  1
    add   2
    cdd   3
    苏ee   4(所影响的行数为 4 行)
    */
      

  4.   


    declare @tab table(id nvarchar(10),name varchar(10));
    insert into @tab
     select N'011','1' union all select N'add','2' union all
     select N'cdd','3' union all select N'苏ee','4' ;
    --用二进制比较。 注意字节数,0xffffffffffff 代表 3 个 unicode 字符
    select * from @tab where cast(id as varbinary(20)) between 0x00 and 0xffffffffffff
    /*
    011 1
    add 2
    cdd 3
    苏ee 4
    */
    -- 更精确一点 N'苏ee' 对应 
    select cast(N'苏ee' as varbinary(20))
    /*
    0xCF8265006500
    */