Sql函数 - NANVL - 不同的行为

KrG*_*rGk 7 sql oracle

查询1:

SQL> select nanvl(to_char(2),0) a from dual;

     A
    ---
     2
Run Code Online (Sandbox Code Playgroud)

QUERY2:

SQL> select nanvl(to_char(2),null) a from dual;

     A
   -----
Run Code Online (Sandbox Code Playgroud)

怀疑: 为什么第一个查询返回2?我0在查询2中期待.我很困惑.请解释让我理解.

Tim*_*ild 1

select nanvl(to_char(2),null) a from dual;
Run Code Online (Sandbox Code Playgroud)

相当于

select nanvl('2'),null) a from dual;
Run Code Online (Sandbox Code Playgroud)

文字值“2”隐式类型转换为浮点值 2,因此 nanvl() 返回 2

尝试

select nanvl('NaN'),0) a from dual;
Run Code Online (Sandbox Code Playgroud)

这会给你 0