1,select *from 表 where NVL(字段名A,'') = '';
2,SELECT *FROM 表 WHERE 字段名A IS NULL OR 字段名A = ';两句的执行结果不一样
第一句查不出数据
第二句可以查到数据这个如何解释?

解决方案 »

  1.   

    这个是书面解释
    NVL lets you replace a null (blank) with a string in the results of a querywith t as
    (
    select 'a' id , '' name from dual
    union all
    select 'b' id , 'bb' name from dual
    union all
    select 'c' id , 'cc' name from dual
    )--select *from t where NVL(t.name,'') = '';
    SELECT *FROM t WHERE t.name IS NULL OR t.name = '';
    说白了  就是oracle sql中的null  必须是用is去判断   不能用 =
      

  2.   

    NULL与0、空字符串、空格都不同。
      

  3.   

    因为NVL(A,B)有一个IF的判断,如果参数A为空,则取值参数B……
    并不是总会去做替代的。
      

  4.   


    第一句,你的nvl(字段名A,'') = '',由于oracle中''就是null,而null = null的值为false,所以你的第一句SQL是查不出来null值的记录。第二句,你的字段名A IS NULL 是可以查出来null值的记录的。
      

  5.   

    1,改成select *from 表 where NVL(字段名A,'1') = '1';两个就一样了。

    NVL(字段名A,'')
     = '';相当于什么就没做,''和NULL在ORACLE中是一样的。
      

  6.   

    NVL函数,如果为空,后面的参数来替代.1,select *from 表 where NVL(字段名A,' ') = ' ';  --增加空格即可
    2,SELECT *FROM 表 WHERE 字段名A IS NULL OR 字段名A = '';
      

  7.   

    NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何类型。如果两者类型不同,则oracle会自动将c2转换为c1的类型。 
      

  8.   

    在Oracle中''字符和Null值是相同的,包括使用NVL处理之后;下面是测试的代码:
    with tmp_Data as (
      select 1 ID, Null V_NULL, ''  V_STR from dual  --空字符跟Null对比  
      union 
      select 2 ID, '' V_NULL, ''  V_STR from dual  --空字符跟空字符对比  
      union 
      select 3 ID, Null V_NULL, Null  V_STR from dual  --NULL跟Null对比  

    select id, 
           case when v_NULL=V_STR then 1 else 0 end 是否相等,
           case when nvl(v_NULL, '') = V_STR then 1 else 0 end 是否相等_NVL     
    from tmp_Data;