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.   

    不使用trim就用replace
    总面言之有空格
    或者用LIKE
      

  2.   

    QMS100M.SC_NO中存有' '  --空格
      

  3.   

    其实记录里没有空格啊,只是QMS200M.SC_NO由原来的varchar2(20)改成了varchar2(11),内容都一样的
      

  4.   

    不用trim 也能查到
    varchar2 会自动补空格。
    sql 没有问题
      

  5.   

    --查找QMS100M表的字段sc_no中带有空格的记录:select * from QMS100M where sc_no like '% %';
      

  6.   

    甚至使用
    update QMS100M set SC_NO=trim(SC_NO)
    然后再执行上面的查询,依然找不到记录
      

  7.   

    QMS100M.SC_NO
    你数据库里存的有问题?
    这样的SQL语句,完全没问题
      

  8.   

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

  9.   

    有意思
    为什么我没碰到这样的问题啊.使用trim能查出结果,就说明你字符里存在空格.
      

  10.   


    --这样吧,运行一下下面的语句看一下好不好?SELECT A.sc_no||b.sc_no,b.sc_no||a.sc_no FROM QMS100M A, QMS200M B WHERE A.SC_NO = B.SC_NO;
      

  11.   

    执行下面的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%';
      

  12.   

    1.drop table QMS200M;
    2.重建QMS200M表吧!
      

  13.   

    或者:create table QMS200M1 as select * from QMS200M where 1=1;再试一下:SELECT A.* FROM QMS100M A,QMS200M1 B WHERE A.SC_NO=B.SC_NO;