#IFNULL

ifnull
IFNULL ( expr1 , expr2 )

IFNULL函数有2个expr参数,当expr1不为NULL时返回expr1,否则返回expr2。

expr1,expr2的值可以为任意数据类型。当expr1和expr2的数据类型相同时,函数返回此数据类型的值。

当expr1,expr2其中之一为RAW、JSON、CLOB、BLOB、NCLOB类型时,不允许与其它类型搭配使用,两个参数必须类型相同,否则函数返回错误,函数返回值类型同expr数据类型。

当expr1,expr2其中之一为XMLTYPE时,expr1和expr2的数据类型必须相同,否则函数返回错误,函数返回值类型为XMLTYPE类型。

若expr1和expr2的数据类型不相同,函数将先进行隐式类型转换后再返回结果,基本规则如下:

  • expr1与expr2分属如下不同大类组时,函数返回VARCHAR类型:

  • 数值型

  • 日期时间型

  • 字符型

  • ROWID

  • expr1与expr2其中之一为布尔型时:

    • 另一方属于非数值型的其他大类时,函数返回VARCHAR类型。

    • 另一方属于数值型(除BIT外)时,函数返回对应的数值类型。

  • 另一方为BIT类型时,函数返回BIGINT类型。

  • expr1与expr2均属于字符型时,函数返回VARCHAR类型。

  • expr1与expr2均属于日期时间型时,函数返回类型如下表所示:

expr1/expr2 DATE TIME TIMESTAMP INTERVAL
YEAR TO
MONTH
INTERVAL
DAY TO
SECOND
DATE DATE DATE TIMESTAMP VARCHAR VARCHAR
TIME DATE TIME TIMESTAMP VARCHAR VARCHAR
TIMESTAMP TIMESTAMP TIMESTAMP TIMESTAMP VARCHAR VARCHAR
INTERVAL
YEAR TO
MONTH
VARCHAR VARCHAR VARCHAR INTERVAL
YEAR TO
MONTH
VARCHAR
INTERVAL
DAY TO
SECOND
VARCHAR VARCHAR VARCHAR VARCHAR INTERVAL
DAY TO
SECOND

其中,在将TIME类型转换为DATE或TIMESTAMP类型时,年月日补充为当前日期。

  • expr1与expr2均属于数值型时,函数返回类型如下表所示:
expr1/expr2 BIT TINYINT SMALLINT INT BIGINT FLOAT DOUBLE NUMBER
BIT BIT BIGINT BIGINT BIGINT BIGINT DOUBLE DOUBLE NUMBER
TINYINT BIGINT TINYINT SMALLINT INT BIGINT FLOAT DOUBLE NUMBER
SMALLINT BIGINT SMALLINT SMALLINT INT BIGINT FLOAT DOUBLE NUMBER
INT BIGINT INT INT INT BIGINT FLOAT DOUBLE NUMBER
BIGINT BIGINT BIGINT BIGINT BIGINT BIGINT FLOAT DOUBLE NUMBER
FLOAT DOUBLE FLOAT FLOAT FLOAT FLOAT FLOAT DOUBLE DOUBLE
DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE
NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER DOUBLE DOUBLE NUMBER(p/s)
  • expr1与expr2均为NUMBER类型且精度相同时,函数返回此精度的NUMBER类型。
  • expr1与expr2为不同精度的NUMBER类型,或者一方为NUNBER类型,另一方为非NUMBER类型时,函数返回浮动精度的NUMBER类型。

示例

SELECT IFNULL(1, 2) res FROM DUAL;
         RES 
------------ 
           1

SELECT IFNULL(NULL, 2) res FROM DUAL;
RES   
----- 
2    

SELECT IFNULL(TRUE, 2) res FROM DUAL;
         RES 
------------ 
           1
             
SELECT IFNULL(5, CAST('0.232222' AS FLOAT)) res,
TYPEOF (IFNULL(5, CAST('0.232222' AS FLOAT))) res_type
FROM DUAL;
        RES RES_TYPE                                                         
----------- ---------- 
   5.0E+000 float 
pdf-btn 下载文档
copy-btn 复制链接