Oracle使用NVL()函数问题

Oracle 语句如下

SELECT tuihuitime,kaibiaoremark,danweiguid,danweiname,rowguid,biaoduanguid from PingBiao_KaibiaoTouBiao WHERE  
BiaoDuanGuid='83a78c4c-eeab-4073-865b-9bb7f88916b2' and IsTouBiao='1' 
and IsSucceed='1' 

img

当使用NVL()函数添加对字段 tuihuitime 的判断后,得到的查询结果却变成了空

and (nvl(tuihuitime,'')='')

img

nvl一般是给一个非空的值,你这个(tuihuitime,'') 最终不还是返回null么,那你条件就应该是

and (nvl(tuihuitime,'') is null)
  • 这篇文章讲的很详细,请看:Oracle中的NVL函数
  • 除此之外, 这篇博客: Oracle常用函数中的 1.NVL()和NVL2()函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • NVL(string1, replace_with)
    功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

    -- 计算年工资,comm为奖金.部分员工没有奖金,如果comm值为null,则用0来替代
    select ENAME 姓名,12*SAL + nvl(comm,0) 工资 from EMP;
    

    NVL2(expr1,expr2,expr3)
    功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。

    -- 如果flag的值为null,则返回值为22;如果flag的值不为null,则返回值为11
    select nvl2(flag,'11','22')flag from t_operation_log