SQL-COALESCE和ISNULL之间的区别?
COALESCE()和ISNULL(,'')之间的实际区别是什么 在SQL连接中避免空值时,最好使用哪一个 谢谢 比较COALESCE和ISNULL ISNULL函数和COALESCE表达式具有类似的用途,但其行为可能有所不同SQL-COALESCE和ISNULL之间的区别?,sql,sql-server,Sql,Sql Server,COALESCE()和ISNULL(,'')之间的实际区别是什么 在SQL连接中避免空值时,最好使用哪一个 谢谢 比较COALESCE和ISNULL ISNULL函数和COALESCE表达式具有类似的用途,但其行为可能有所不同 因为ISNULL是一个函数,所以它只计算一次。如上所述, 合并表达式的输入值可以进行多次求值 时代 结果表达式的数据类型确定为 不一样。ISNULL使用第一个参数COALESCE的数据类型 遵循大小写表达式规则并返回值的数据类型 以最高的优先级 ISNULL和COALES
COALESCE()
可以有多个输入,它将按顺序计算,直到其中一个输入不为null,例如COALESCE(Col1,Col2,Col3,'N/A')
。建议MS使用此选项,而不是ISNULL()
ISNULL()
只能有一个输入,但是它的速度比COALESCE稍快。主要区别在于,COALESCE
是ANSI标准,因此您也可以在其他RDBMS中找到它,另一个区别是,您可以向COALESCE
提供一个要检查的值的完整列表,而向ISNULL
只能传递一个值。因为ISNULL
是一个函数,它只被计算一次。如上所述,可以多次计算合并
表达式的输入值。
COALESCE
基本上转换为CASE
表达式,ISNULL
是数据库引擎中实现的内置函数
coalesce
由SQL标准定义,几乎可以在所有DBMS上使用isnull()
仅适用于Microsoft产品。isnull
需要两个参数,COALESCE
可以使用n
参数,这取决于SQL Server的要求和版本。MySQL也有isnull。在问这个问题之前,我发现了isnull与COALESCE的问题。但是我问了连接列时的实际差异(性能、最佳实践、代码行为等),这就是为什么我提出了一个新问题。抱歉,如果这是一个重复的问题。更重要的是,COALESCE
只是一个CASE
表达式的快捷方式,这意味着优化器重写它以使用CASE
instead@paxdiablo联机丛书,SQL Server官方文档。抱歉,不确定它是否仍然被称为,但它曾经被称为。啊,谢谢,这比我的尝试更有意义:-)类型处理(2):“ISNULL
比COALESCE
”[需要引用]更快。在哪些情况下?为什么?
> USE tempdb;
> GO
> -- This statement fails because the PRIMARY KEY cannot accept NULL values
> -- and the nullability of the COALESCE expression for col2
> -- evaluates to NULL.
> CREATE TABLE #Demo ( col1 integer NULL, col2 AS COALESCE(col1, 0) PRIMARY KEY, col3 AS ISNULL(col1, 0) );
>
> -- This statement succeeds because the nullability of the
> -- ISNULL function evaluates AS NOT NULL.
>
> CREATE TABLE #Demo ( col1 integer NULL, col2 AS COALESCE(col1, 0),
> col3 AS ISNULL(col1, 0) PRIMARY KEY );