select a.cqualitylevelid from scm_batchcode a
where nvl(a.cqualitylevelid,'a') = 'a' 能查出为NULL数据

select a.cqualitylevelid from scm_batchcode a
where nvl(a.cqualitylevelid,'') = ''
查不出为NULL的数据? 

解决方案 »

  1.   

    null和''一个意思,如果你要查空的数据,只需 where a.cqualitylevelid is null 即可
      

  2.   

    select a.cqualitylevelid from scm_batchcode a 
    where nvl(a.cqualitylevelid,'') = '' 
    查不出为NULL的数据? 改成:
    select a.cqualitylevelid from scm_batchcode a 
    where nvl(a.cqualitylevelid,'') is null
      

  3.   

    --还不如直接
    select a.cqualitylevelid from scm_batchcode a 
    where a.cqualitylevelid  is null 
      

  4.   

    是这样的
    select a.cqualitylevelid from scm_batchcode a 
    where nvl(a.cqualitylevelid,'a') = (?)
    ? 这个地方其实是一个字符串变量,有些时候是空串,有些时候是有值的.
    所以不能用 is null.这其实是一个查询语句.就是查 a.cqualitylevelid等于我传给他的这个变量.我是用java.
      

  5.   

    select a.cqualitylevelid from scm_batchcode a
    where nvl(a.cqualitylevelid,' ') = ' '
      

  6.   

    那就处理一下(?)这个字符串变量,如果是空串,赋一个特定值类似这样:select a.cqualitylevelid from scm_batchcode a 
    where nvl(a.cqualitylevelid,'NULL') = nvl(?,'NULL') 
      

  7.   


    老兄说的很对,我现在就是这么干的,的确可行.
    select a.cqualitylevelid from scm_batchcode a
    where nvl(a.cqualitylevelid,'a') = nvl(?,'a')
    现在我对oracle中空串和NULL的区分还不是很明了
      

  8.   

    空串、'' 用IS NULL去判断,或者LENGTH()=0也可以判断是空串。
    再就是用nvl处理一下用是否相等去判断了。