22
A
回答
46
COALESCE和ISNULL
ISNULL函数与COALESCE表达比较有相似的目的,但可以表现不同。
- 因为ISNULL是一个函数,所以它只被计算一次。如上所述,对于COALESCE表达式的输入值可以评估多次 次。
- 由此产生的表达式的数据类型确定为 不同。 ISNULL使用第一个参数的数据类型,COALESCE 遵循CASE表达式规则并返回具有最高优先级的值 的数据类型。
- 对于ISNULL和COALESCE,结果表达式的NULLability是不同的。 ISNULL返回值始终被认为不可空(假设返回值为 不可为空),而具有非空参数的COALESCE被认为是NULL,即 。所以表达式ISNULL(NULL,1)和 COALESCE(NULL,1)虽然等价有不同的可空性 值。如果您在 计算列中使用这些表达式,创建关键约束或将标量UDF的返回值 确定为确定性,以便它可以编入索引,如下面的示例中的 所示,这会有所不同。
> 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 );
验证了ISNULL和 COALESCE也不同。例如,ISNULL的NULL值是 转换为int,而对于COALESCE,则必须提供数据类型。 ISNULL仅需要2个参数,而COALESCE需要变量 个参数。
来源:BOL
0
COALESCE()
可以有多个输入,它会为了评估直到其中的一个不为空,如COALESCE(Col1, Col2, Col3, 'N/A')
。建议使用MS而不是ISNULL()
ISNULL()
只能有一个输入,但它显示比COALESCE稍快。
9
的主要区别是,COALESCE
是ANSI标准,所以你还会发现它在其他RDBMS,其他不同的是,你可以给值的整个列表进行检查,以COALESCE
而到ISNULL
你只能通过一。
4
因为ISNULL
是一个函数,所以只计算一次。如上所述,可以多次评估COALESCE
表达式的输入值。 COALESCE
基本上转换为CASE
表达式并ISNULL
是一个内置在数据库引擎中实现的。
ISNULL
比COALESCE
更快。
+3
_“'ISNULL '比'COALESCE'快。“[[需要的引证]]在哪些情况下?为什么? –
相关问题
- 1. IsNull(x)和x =“”之间有区别吗?
- 2. 是什么ISNULL之间的临时表VS ISNULL上原始表的区别?
- 3. 在Excel VBA中,“IsNull()”和“var = Null”之间有什么区别?
- 4. 'OR'和'||'之间的区别在SQL中?
- 5. PDO:rowCount()和SQL COUNT(col)之间的区别
- 6. .SQL和.DUMP文件之间的区别
- 7. Apache Spark SQL和MongoDB之间的区别?
- 8. PROC SQL和sqldf之间的区别
- 9. 之间的〜/和的区别../
- 10. ISNULL/COALESCE多个领域
- 11. Computed Column(COALESCE vs CASE vs ISNULL)
- 12. '#','%'和'$'之间的区别
- 13. {!!之间的区别!!}和{{}}
- 14. '+ ='和'= +'之间的区别?
- 15. “。+”和“。+?”之间的区别
- 16. .eq之间的区别。和==
- 17. #。/和#之间的区别。 ./
- 18. !=和!之间的区别==
- 19. “%〜dp0”和“。\”之间的区别?
- 20. | =和^ = css之间的区别
- 21. 之间的区别。和#
- 22. ==和case之间的区别?
- 23. “**/* /”和“** /”之间的区别?
- 24. jQuery - '。'之间的区别和“#”
- 25. “?1”和“?”之间的区别
- 26. `%in%`和`==`之间的区别
- 27. fmod和%之间的区别
- 28. 之间的区别:+和:+
- 29. mysql_data_seek和mysql_field_seek之间的区别?
- 30. 类区域和堆之间的区别
'coalesce'由SQL标准定义,并将努力在几乎所有的DBMS。 'isnull()'只适用于Microsoft产品。 –
'ISNULL'有两个参数,'COALESCE'可以有'n'参数,它取决于SQL Server的要求和版本,以哪个为首选。 –
MySQL也有isnull。 –