一个查询问题,有点怪。
oracle 10g ,字符集是ZHS16GBK,其中一表中有行数据如下itemuuid    prjt_cd  itmz_sno
SJZ2009023  SJ       SJZ2009023使用 select itemuuid,prjt_cd,itmz_sno 
from ims.ITEMIZE where itmz_sno = 'SJZ2009023'
语句查询不出数据;而用模糊查询可以
select itemuuid,prjt_cd,itmz_sno 
from ims.ITEMIZE where itmz_sno like '%SJZ2009023%'其他数据可以使用精确查询出数据;
我查询后发现是用length查看SJZ2009023的长度为12,而直接数是10位。各位是否有遇到过。表中ITTEMUUID,ITMZ_SNO是从其他系统导过来的。是否是与字符集有关还是其他原因。请大家多多赐教。谢谢!

解决方案 »

  1.   

    可能是空格。select itmz_sno,dump(itmz_sno) from ims.ITEMIZE
    where itmz_sno like '%SJZ2009023%' ;贴出结果
      

  2.   

    SJZ2009023(补) ,
    Typ=1 Len=16: 83,74,90,50,48,48,57,48,50,51,40,178,185,41,13,10
    SJZ2009023, Typ=1 Len=12: 83,74,90,50,48,48,57,48,50,51,13,10
      

  3.   

    select itmz_sno,dump(itmz_sno) from ims.ITEMIZE
    where itmz_sno like '%SJZ2009023%' ;贴出结果SJZ2009023(补) ,
    Typ=1 Len=16: 83,74,90,50,48,48,57,48,50,51,40,178,185,41,13,10
    SJZ2009023, Typ=1 Len=12: 83,74,90,50,48,48,57,48,50,51,13,10 
      

  4.   

    看你的dump,可以知道在字段值SJZ2009023的最后多了个“回车符”和“换行符”。update ims.ITEMIZE 
    set itmz_sno=translate(itmz_sno,'#'||chr(13)||chr(10),'#');
      

  5.   

    注意update前确定该字段确实不需要这两个字符再操作。