SELECT reqid, aid, ASCIISTR(aid) asciistr, ASCII(aid) ascii,
       NVL(aid, 'aid is null') NVL, ldate, sysdate
  FROM sms.bak_sms_sendinfo
 WHERE cid='gf'
   AND ldate >= TO_DATE ('2007-12-21 11:5:00', 'yyyy-mm-dd hh24:mi:ss')
   AND ldate < TO_DATE ('2007-12-22 11:6:00', 'yyyy-mm-dd hh24:mi:ss')
   AND reqid in (642687000,642687370,642687061)--================================================= 
aid 看起来有两个为空(排除空格). 但是一个用ASCII(aid)   ,返回0,表示aid为 null; 
用NVL(aid,'aid   is   null')   却没内容. 另一个用ASCII(aid)   没内容; 
用NVL(aid,'aid   is   null')   返回"aid   is   null". 详细请看附图. 

解决方案 »

  1.   

    楼主好像把null和'\0'混淆了.从你的这个结果来看.应该是这个结果。你可以把你的值dump出来看看的。
      

  2.   

    SELECT reqid, aid,dump(aid) dump,
       ASCIISTR (aid) asciistr, ASCII (aid) ascii,
           NVL (aid, 'aid is null') NVL
      FROM sms.bak_sms_sendinfo
     WHERE cid='gf'
       AND ldate >= TO_DATE ('2007-12-21 11:5:00', 'yyyy-mm-dd hh24:mi:ss')
       AND ldate < TO_DATE ('2007-12-22 11:6:00', 'yyyy-mm-dd hh24:mi:ss')
       AND reqid in (642687000,642687370,642687061)--============================REQID AID DUMP ASCIISTR ASCII NVL
    ----------- ---------- ----------------------------- -------------- ---------- -------
    642687000 Typ=1 Len=6: 0,0,0,0,0,0 0
    642687061 NULL aid is null
    642687370 hhyf Typ=1 Len=4: 104,104,121,102 hhyf 104 hhyf
    嗯,用dump得到的值是不同,但看不懂是什么值.
    oracle中的值除了null,空格 还有什么值看起是空白的谢谢
      

  3.   


    REQID       AID       DUMP                              ASCIISTR         ASCII             NVL
    ----------- ------ ---------                           ----------     -----------       ------- 
    642687000              Typ=1 Len=6: 0,0,0,0,0,0                            0
    642687061              NULL                                                              aid is null
    642687370   hhyf       Typ=1 Len=4: 104,104,121,102       hhyf             104           hhyf
      

  4.   

    null带入任何运算的返回值都是null所以第二条记录返回了"aid       is       null"
    0对应的ascii字符是空,并非null,所以第一条记录返回的是aid的内容,所以为空,没内容。
    begin
      if chr(0) is null then
        dbms_output.put_line('ASCII 0 map to ot NULL value.');
      else
        dbms_output.put_line('You are wrong.');
      end if;
    end;
      

  5.   

    赫赫,dump出来的就可以清楚说明问题了.oracle可以支持很多格式,很多语言。\0其实就是c语言用到的终止符。当然其他语言也有类似的。在lob,nchar等类型中,都可以用到。null呢,就是一个完全是空的。就像很多语言提到的定义。但是没有初始化。\0是一个看不到的字符,所以,你就认为它是Null了。其实他们区别,就是一个初始化了,一个还没有。就是说,一个有内容,一个没有内容。
      

  6.   

    看起是空白的字符,你可以用chr从0-255一个一个显示过来就知道了。赫赫。
      

  7.   

    sql 中的 null 不是 ascii 表中的 null。
      

  8.   

    null 既不是"真",也不是"假",事实上,是未知的.
    SQL> select * from dual where null<>null;未选定行
    SQL> select * from dual where null=null;未选定行