各位大侠好啊,小弟问问一个奇怪的Oracle数据库问题,问题如下:
For example:
TableA里有一个字段FieldA,字段的属性是Varchar2(50),字段存了写Value,如:
AA
BB
CC
DD
操作:
1、用查询语句
Select FieldA From TableA Where FieldA='AA' 查不出数据
Select FieldA From TableA Where FieldA like 'AA%' 可以查出一行数据,且显示的值是AA
2、查长度
Select length(FieldA) From TableA where FieldA like 'AA%' 查出来长度是3
3、AA后加一个或多个字符
Update TableA Set FieldA || 'H' where FieldA like 'AA%'   执行成功
4、再查询长度
Select length(FieldA) From TableA where FieldA like 'AA%' 查出来长度是4(正确,因为加了一个H字符,试过加两个或者多个字符,字段长度也会相应的增加,这里没错)
5、问题就出在这里了
Select FieldA From TableA Where FieldA='AA' 依然查不出数据(应该说是肯定查不出的)
Select FieldA From TableA Where FieldA like 'AA%' 可以查出一行数据,且显示的值仍然是AA,AA后面不带任何字符(奇怪就是在这里了!)无论AA后来加了什么字符进去,查出来的都只显示AA。
试过直接从结果里复制AA的整一个字符串出来用=来查,还是查不出来,而且复制出来到文本编辑器里去粘贴也只是显示AA两个字符,后面所加的H或者多个其他字符都不见了!!!
请问有哪位可以帮帮忙帮我解决解决吗?
还有一个信息,数据是通过PB的程序添加进去的,用户添加的,所以现在不知道用户是怎么加进去的。。

解决方案 »

  1.   

    估计是aa后面有个什么隐含字符。你可以这样查select ascii(substrb(FieldA,3,1)) from tablea;
      

  2.   

    查过了,显示ascii值为0,可以查到我最后加的那个H的值,就是AA***H,第三到第五个的值都是0,到第六个(也就是H)就是H的值了,但是还是只显示AA,后面的H不显示郁闷
    大家可以帮帮忙吗??谢谢了!!!
      

  3.   

    select lpad(field,2) from tablea;
      

  4.   

    用substrb来截取前面的字符,然后update
      

  5.   

    这个办法是可以实现,可是量太多了,要写几十上百update的语句,因为不是所有的值都是这种情况,而且出现这种情况的值又不是相同字符串的!!
      

  6.   

    试试translate来转
    SQL> create table t(c1 varchar2(50));Table createdSQL> insert into t values('11');1 row insertedSQL> insert into t values('22'||chr(0));1 row insertedSQL> insert into t values('33'||chr(0)||'3');1 row insertedSQL> insert into t values('44'||chr(10)||'4');1 row insertedSQL> commit;Commit completeSQL> select * from t;C1
    --------------------------------------------------
    11
    22
    33
    44
    4
    SQL> alter table t add c2 number;Table alteredSQL> update t set c2=lengthb(c1);4 rows updatedSQL> commit;Commit completeSQL> select * from t;C1                                                         C2
    -------------------------------------------------- ----------
    11                                                          2
    22                                                          3
    33                                                          4
    44                                                          4
    4                                                  
    SQL> update t set c1=translate(c1,'1'||chr(0),'1');4 rows updatedSQL> commit;Commit completeSQL> select c1,lengthb(c1),c2 from t;C1                                                 LENGTHB(C1)         C2
    -------------------------------------------------- ----------- ----------
    11                                                           2          2
    22                                                           2          3
    333                                                          3          4
    44                                                           4          4
    4                                                              
    SQL> 
      

  7.   

    谢谢bobfang,可以用like chr(0)查出那些数据来!!谢谢了!!非常谢谢。
      

  8.   

    怎么给不了分啊?是不是点管理帖子,然后输入对应的分数按enter啊??
    输了后按Enter了,他提示密码错误??奇怪!!!