如下三条语句:语句1查询不出结果,2,3均可以,card_no字段为char(10)类型,表card为分区表
语句1
select card_sts, a.*
  from card a
 where a.card_no in ('card1','card2')
语句2
 select card_sts, a.*
  from card a
 where trim(a.card_no) in ('card1','card2')
语句3
  select card_sts, a.*
  from card a
 where a.card in ('card1')
语句1为什么查询不出结果

解决方案 »

  1.   

    貌似有点奇怪,改为用=试试:select card_sts, a.* 
      from card a 
    where a.card_no='card1' or a.card_no='card2';
      

  2.   

    因为char(10),不足10位会补空格的.
      

  3.   

    http://blog.csdn.net/panyork/archive/2006/08/12/1054481.aspx
    http://blog.csdn.net/jxcjxinxing/archive/2007/03/30/1546493.aspx
    同意楼上空格的说法.
      

  4.   

    语句1和语句3的字段都不是同一个,
    语句2中是去了空格以后的,所有说你的card_no的值是有空格的,所以查询不出来
      

  5.   

    SQL> create table card (card_no char(10), id number(4));表已创建。SQL> insert into card values('123', 1);已创建 1 行。SQL> insert into card values('1234', 2);已创建 1 行。SQL> insert into card values('123 ', 3);已创建 1 行。SQL> insert into card values('1234   ', 4);已创建 1 行。SQL> commit;提交完成。SQL> select * from card where card_no in ('123','1234');CARD_NO            ID
    ---------- ----------
    123                 1
    1234                2
    123                 3
    1234                4SQL>
      

  6.   

    char类型当不足位时会补空格
    建议用varchar类型
      

  7.   

    现在变更类型是不行的,就用一个trim去控制吧。
      

  8.   

    char若不足则补空格,VARCHAR和VARCHAR2没有,所以比较CHAR型的时候要注意,或者干脆加TRIM()
      

  9.   

    那为什么
    LZ的第句可以呢语句3 
      select card_sts, a.* 
      from card a 
    where a.card in ('card1') 
      

  10.   

    不好意思,语句三的字段写错了,
    应该是
    语句3 
      select card_sts, a.* 
      from card a 
    where a.card_no in ('card1') 问题应该跟空格没关系,因为语句3可以查询出结果,而在语句一中,同样的卡号查询不出结果。
      

  11.   

    楼主还方便给出card的建表脚本?