在 SQL Server 中,我们可以使用 IsNull()
函数来确定字段是否为空。那么,在 PL/SQL 中有没有等效的函数呢?
NVL()
函数来判断字段是否为空。在 SQL Server 中,我们可以使用 IsNull()
函数来确定字段是否为空。那么,在 PL/SQL 中有没有等效的函数呢?
NVL()
函数来判断字段是否为空。coalesce
在Oracle和SQL Server中均得到支持,它的作用与nvl
和isnull
基本相同。(但是有一些重要区别:coalesce
可以接受任意数量的参数,并返回第一个非空值。而isnull
的返回类型与第一个参数的类型匹配,而coalesce
在SQL Server上不符合这个规则。)
使用NVL()
代替ISNULL()
。
T-SQL:
SELECT ISNULL(SomeNullableField, 'If null, this value') FROM SomeTable
PL/SQL:
SELECT NVL(SomeNullableField, 'If null, this value') FROM SomeTable
如果您想从field_to_check
返回其他值,也可以使用以下方式使用NVL2
:
NVL2( field_to_check, value_if_NOT_null, value_if_null )
COALESCE
是符合ANSI标准的,被Postgres、MySQL等支持。唯一需要注意的是它的执行速度不一定比本地语法快。 - OMG PoniesCOALESCE
相较于NVL
有一个重要的优势,就是它可以进行短路求值,而NVL
则总是会对两个参数都进行求值。比较一下COALESCE(1,my_expensive_function)
和NVL(1,my_expensive_function)
。 +1。 - Jeffrey KempCOALESCE()
函数非常好用,你可以在 MSDOC> COALESCE 上了解它——同样的语法也适用于 Oracle。如果你的数据中有空字符串而不是 NULLS,你可能需要像这样使用:COALESCE(TRIM(Tbl.myField1), TRIM(Tbl.myField2)) AS "myNewField"
。 - SherlockSpreadsheets