Oracle中与SQL Server的IsNull()函数等效的是什么?

142

在 SQL Server 中,我们可以使用 IsNull() 函数来确定字段是否为空。那么,在 PL/SQL 中有没有等效的函数呢?

在PL/SQL中,我们可以使用 NVL() 函数来判断字段是否为空。
4个回答

157

coalesce在Oracle和SQL Server中均得到支持,它的作用与nvlisnull基本相同。(但是有一些重要区别:coalesce可以接受任意数量的参数,并返回第一个非空值。而isnull的返回类型与第一个参数的类型匹配,而coalesce在SQL Server上不符合这个规则。)


9
COALESCE是符合ANSI标准的,被Postgres、MySQL等支持。唯一需要注意的是它的执行速度不一定比本地语法快。 - OMG Ponies
20
COALESCE 相较于 NVL 有一个重要的优势,就是它可以进行短路求值,而 NVL 则总是会对两个参数都进行求值。比较一下 COALESCE(1,my_expensive_function)NVL(1,my_expensive_function)。 +1。 - Jeffrey Kemp
这个 COALESCE() 函数非常好用,你可以在 MSDOC> COALESCE 上了解它——同样的语法也适用于 Oracle。如果你的数据中有空字符串而不是 NULLS,你可能需要像这样使用:COALESCE(TRIM(Tbl.myField1), TRIM(Tbl.myField2)) AS "myNewField" - SherlockSpreadsheets

142

使用NVL()代替ISNULL()

T-SQL:

SELECT ISNULL(SomeNullableField, 'If null, this value') FROM SomeTable

PL/SQL:

SELECT NVL(SomeNullableField, 'If null, this value') FROM SomeTable

44

如果您想从field_to_check返回其他值,也可以使用以下方式使用NVL2

NVL2( field_to_check, value_if_NOT_null, value_if_null )

用法: ORACLE/PLSQL: NVL2 函数


10
您可以使用条件语句if x is not null then...,它不是一个函数。还有NVL()函数,这里有一个很好的用法示例:NVL函数参考

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接