NVL(table.column,'')会做什么?

时间:2015-02-26 14:10:30

标签: sql oracle

只是查看查询并注意它使用NVL(table.column, ''),引号之间没有任何内容。

这会起到什么作用?这不等于NULL?

5 个答案:

答案 0 :(得分:3)

是的,在oracle中编写它是不好的编程习惯。无论列值是什么,它基本上保持相同的值。如果在where子句中没有使用那些列可能包含的索引,它甚至可能会对性能造成伤害。

答案 1 :(得分:1)

在Oracle中它不会做任何事情,因为空字符串是IS NULL。 但是在其他数据库中,如果table.column wloud为NULL,则它将返回空字符串的NOT NULL值。

Here是对此行为进行更彻底解释的链接。

答案 2 :(得分:1)

在Oracle中,是的,这是一个毫无意义的表达。

但是,在大多数数据库中,它会将NULL值转换为与NULL不同的空字符串(这里是why Oracle treats the empty string as NULL上的单独问题)。我猜想,编写查询的人都希望Oracle遵循ANSI标准,并且有问题的代码有错误,或者至少没有按照作者的意图运行。

答案 3 :(得分:0)

来自oracle文档:

NVL允许您使用查询结果中的字符串替换null(作为空白返回)。如果expr1为null,则NVL返回expr2。如果expr1不为null,则NVL返回expr1。

答案 4 :(得分:0)

此调用等同于简单字段引用(table.column)。

如果在查询的where部分使用它(这可能是优化的一部分,防止不需要的索引使用),这样的表达式可能有意义。