A function that tests for NULL and returns the appropriate expression.
Description
NVL evaluates check-expression and returns one of two values:
-
If check-expression is NULL, replace-expression is returned.
-
If check-expression is not NULL, check-expression is returned.
The arguments check-expression and replace-expression can have any data type. If their data types are different, SQL converts replace-expression to the data type of check-expression before comparing them. The data type of the return value is always the same as the data type of check-expression, unless check-expression is character data, in which case the return value’s data type is VARCHAR2.
Note that NVL is supported for Oracle compatibility, and is the same as the ISNULL function.
Refer to NULL section of the “Language Elements” chapter of Using InterSystems SQL for further details on NULL handling.
DATE and TIME Display Conversion
Some check-expression data types require conversion from Logical mode to ODBC mode or Display mode. For example the DATE and TIME data types. If the replace-expression value is not the same data type, this value cannot be converted in ODBC mode or Display mode, and an SQLCODE error is generated: -146 for DATE data type; -147 for TIME data type. For example, ISNULL(DOB,'nodate') cannot be executed in ODBC mode or Display mode; it issue an SQLCODE -146 error with the %msg Error: 'nodate' is an invalid ODBC/JDBC Date value or Error: 'nodate' is an invalid DISPLAY Date value. To execute this statement in ODBC mode or Display mode, you must CAST the value as the appropriate data type: ISNULL(DOB,CAST('nodate' as DATE)). This results in a date 0, which displays as 1840-12-31.
Examples
This following example returns the replace-expression (99) because the check-expression is NULL:
SELECT NVL(NULL,99) AS NullTest
This following example returns the check-expression (33) because check-expression is not NULL:
SELECT NVL(33,99) AS NullTest
The following example returns the string 'No Preference' if FavoriteColors is NULL; otherwise, it returns the value of FavoriteColors:
SELECT Name, NVL(FavoriteColors,'No Preference') AS ColorChoice
FROM Sample.Person