首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ISNULL与使用COALESCE检查特定条件?

使用ISNULL与使用COALESCE检查特定条件?
EN

Stack Overflow用户
提问于 2011-09-14 05:40:22
回答 6查看 51.8K关注 0票数 76

我知道可以向COALESCE传递多个参数,但是当您只想检查一个表达式是否不存在时,您是使用默认值还是使用ISNULL更好呢?

两者之间是否有性能上的提升?

EN

回答 6

Stack Overflow用户

发布于 2011-09-14 05:42:42

我不这么认为,但是COALESCE是在SQL '92标准中的,并且被更多不同的数据库支持。如果你想要可移植性,就不要使用ISNULL。

票数 27
EN

Stack Overflow用户

发布于 2014-03-14 00:21:18

COALESCE中,您可以有多个表达式,而在ISNULL中,您只能选中一个表达式

代码语言:javascript
复制
COALESCE ( expression [ ,...n ] ) 

ISNULL ( check_expression , replacement_value )
票数 13
EN

Stack Overflow用户

发布于 2014-10-07 04:45:18

值得一提的是,两者之间的类型处理也会有所不同(参见this related answer item (2))。

假设查询尝试使用快捷方式来编写空比较:

代码语言:javascript
复制
select * from SomeTable
 where IsNull(SomeNullableBitField, -1) != IsNull(SomeOtherNullableBitField, -1);

这不同于

代码语言:javascript
复制
select * from SomeTable
 where coalesce(SomeNullableBitField, -1) != coalesce(SomeOtherNullableBitField, -1);

因为在第一种情况下,IsNull()强制类型为位(因此-1被转换为true),而第二种情况将两者都提升为整型。

代码语言:javascript
复制
with input as 
(
  select convert(bit, 1) as BitOn,      
         convert(bit, 0) as BitOff,
         convert(bit, null) as BitNull
)
select BitOn, 
       BitOff,
       BitNull,
       IsNull(BitOn, -1) IsNullBitOn,         -- true
       IsNull(BitOff, -1) IsNullBitOff,       -- false
       IsNull(BitNull, -1) IsNullBitNull,     -- true, converts the -1 to bit
       coalesce(BitOn, -1) CoalesceBitOn,     -- 1
       coalesce(BitOff, -1) CoalesceBitOff,   -- 0       
       coalesce(BitNull, -1) CoalesceBitNull  -- -1
  from input;

这个问题本身也有类似的评论/链接(@Martin Smith)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7408893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档