我在PLSQL客户端中打了这样的一句话
select * from table;
然后table中有个字段名字叫car_no,是varchar(15)类型,我随便从刚才的查询结果中复制一个car_no的值name,然后继续查询如下:
select * from table where car_no='name';
结果却查不到任何记录,为何?然后我又做了另外一个查询:
select car_no,length(name) from table;
显示出来name的length是15,为何?还有就是这条记录我是在程序中用JDBC插入的,如果我用PLSQL直接插入的话是没有上面描述的情况的!是什么原因造成的?字符编码?请高人指点!

解决方案 »

  1.   

    空格select * from table where rtrim(car_no)='name';试试
      

  2.   

    哦,不好意思,忘记说了,用这个方法我也试过:
    select * from table where trim(car_no)='name';
    但是也查不出任何记录!
      

  3.   

    而且这个'name'的值是我复制过来的,就算有空格也会一起复制过来吧
      

  4.   

    照道理如果长度为15,最有可能是加了空格,用TRIM可以滤掉两边的空格的啊
    要不你这样试试
    select * from table where trim(trim(trim(car_no),chr(10)),chr(13))='name'; 
    看看不是有回车之类的
      

  5.   

    谢谢hebo2005的指点,不过'trim(trim(trim(car_no),chr(10)),chr(13))'
    trim能这样用?我试了一下,编译不通过,不能执行,是不是这个意思:
    select * from table where trim(trim(chr(13) from trim (chr(10) from car_no)))='name';
    我试了一下这个,也不行!
      

  6.   

    执行如下sql:
    SELECT rawtohex(car_no),car_no FROM table ;把查询的记录,比如包含car_no=name的贴出来看看。
    估计就是因为回车换行导致的。
    select * from table where car_no like '%name%';应该可以查出来。
      

  7.   

    加个双引号试下
    select * from table where "car_no" = 'name' 
      

  8.   

    select * from table where car_no like '%name%';可以的,下面是执行
    SELECT rawtohex(car_no),car_no FROM table ;的结果
    1 42BBA6412D59343836330000000000 B沪A-Y4863
    2 42BBA6412D59343530300000000000 B沪A-Y4500
    3 42BBA6412D4A323637390000000000 B沪A-J2679
    4 42BBA6412D59323833310000000000 B沪A-Y2831
    5 42BBA6412D59303934370000000000 B沪A-Y0947
    6 42BBA6412D59353038340000000000 B沪A-Y5084
    7 42BBA6412D59343630320000000000 B沪A-Y4602
    8 42BBA6412D59343535390000000000 B沪A-Y4559
    9 42BBA6422D59383932330000000000 B沪B-Y8923
    10 42BBA6412D59363231390000000000 B沪A-Y6219
    11 42BBA6412D59343836300000000000 B沪A-Y4860
    12 42BBA6412D59343532370000000000 B沪A-Y4527
    13 42BBA6412D59353730350000000000 B沪A-Y5705
    14 42BBA6412D59363439310000000000 B沪A-Y6491
    15 42BBA6412D59343537370000000000 B沪A-Y4577
    16 42BBA6412D59343537370000000000 B沪A-Y4577
    17 42BBA6412D59343532370000000000 B沪A-Y4527
    18 42BBA6412D59343630320000000000 B沪A-Y4602
    19 42BBA6412D59343532370000000000 B沪A-Y4527
    20 73746F706E616D6500000000000000 stopname
    21 73746F706E616D6532000000000000 stopname2
    22 6E616D650000000000000000000000 name
    23 6E616D650000000000000000000000 name
    24 42BBA6412D4A323637390000000000 B沪A-J2679
    25 42BBA6412D59323833310000000000 B沪A-Y2831
    26 42BBA6412D4A323637390000000000 B沪A-J2679
      

  9.   

    不是很明显了吗,car_no字段中存在大连的chr(0),执行下面的update,把chr(0)替换就ok了。
    update table set car_no=rTRIM(NAME,chr(0)) where length(rTRIM(car_no,chr(0)))<length(car_no);可能是你们的程序导入或者输入的时候导致的这个问题。
      

  10.   

    上面的写错了个列名。更正后:不是很明显了吗,car_no字段中存在大连的chr(0),执行下面的update,把chr(0)替换就ok了。 
    update table set car_no=rTRIM(car_no,chr(0)) where length(rTRIM(car_no,chr(0))) <length(car_no); 可能是你们的程序导入或者输入的时候导致的这个问题。 
      

  11.   

    十分感谢oracledbalgtu,问题已经解决,但是这个chr(0)代表的是什么意义呢?我怎么才能避免呢?