SELECT A.*
FROM QMS100M A,QMS200M B
WHERE A.SC_NO=B.SC_NOQMS100M.SC_NO varchar2(11) 主键
QMS200M.SC_NO varchar2(11) 非主键
QMS100M中存在一条记录,SC_NO为'12345678901'
QMS200M中存在一条记录,SC_NO为'12345678901'执行如上SQL语句,结果为空。若使用trim(A.SC_NO)=B.SC_NO,则可以查询到一条记录
请问不使用trim如何解决这个问题,谢谢各位了

解决方案 »

  1.   

    从你的描述来看,似乎不存在这种可能,因为唯一可能的原因是a.sc_no包含不可见字符,但是a.sc_no是varchar2(11),且sc_no的值为'12345678901',长度为11,所以你的这种情况不可能存在,除非a.sc_no的varchar2长度定义大于11。
      

  2.   

    有空格就得这么处理啊trim要么你先把数据清理一遍.
      

  3.   


    update QMS100M set SC_NO=trim(SC_NO) 
    然后再执行上面的查询,还是找不到记录
      

  4.   


    update QMS100M set SC_NO=trim(SC_NO) 
    然后再执行上面的查询,还是找不到记录
      

  5.   

    执行下面的sql就可以根据结果知道原因了:
    SELECT RAWTOHEX(SC_NO), LENGTHB(SC_NO)
      FROM QMS100M
     WHERE SC_NO LIKE '%12345678901%';SELECT RAWTOHEX(SC_NO), LENGTHB(SC_NO)
      FROM QMS200M
     WHERE SC_NO LIKE '%12345678901%';
      

  6.   

    SELECT RAWTOHEX(SC_NO), LENGTHB(SC_NO)
      FROM QMS100M
     WHERE SC_NO LIKE '%12345678901%';SELECT RAWTOHEX(SC_NO), LENGTHB(SC_NO)
      FROM QMS200M
     WHERE SC_NO LIKE '%12345678901%';使用以上语句,查询到的结果是一模一样的
    RAWTOHEX(SC_NO), 一串长长的阿拉伯数字
    LENGTHB(SC_NO), 等于11
      

  7.   

    --也许是Oracle缩减字段的bug。--或者LZ干脆创建一张和QMS200M一模一样的表QMS200M1:
    create table QMS200M1 as select * from QMS200M where 1=1; --之后,再试一下:
    SELECT A.* FROM QMS100M A,QMS200M1 B WHERE A.SC_NO=B.SC_NO;