ISNULL函数混乱

时间:2018-07-15 17:41:22

标签: sql

我想知道“ = YES”是什么意思

case when ISNULL (sales_id, ‘NO’) =‘YES’ then 1 else 0;

我了解了ISNULL的含义,但在得到之后,剩下的部分几乎让人困惑。

2 个答案:

答案 0 :(得分:0)

此逻辑完全等同于:

(case when sales_id = 'YES' then 1 else 0 end);

(嗯,这可以解决语法错误-缺少的end

isnull()什么也不做,因为null值始终不匹配。为此,更常见的功能是coalesce()

注意:这假设sales_id是一个字符串。我怀疑实际意图的逻辑是:

(case when sales_id is not null then 1 else 0 end);

答案 1 :(得分:0)

让我们暂时忽略IFNULL调用的存在。如果这样做,我们得到

CASE WHEN SALES_ID = 'YES' THEN 1 ELSE 0 END

此CASE表达式的作用是将SALES_ID列中的“是”转换为1,并将SALES_ID列中的任何其他非NULL值转换为0。在没有其他上下文的情况下,我不知道为什么< / em>已经完成,但这就是该表达式的目的。

需要IFNULL调用,因为显然SALES_ID可以为NULL,并且由于在比较或其他操作中对待NULL的方式。这样想:NULL是有毒的。带有NULL的 Any 操作返回NULL。将NULL添加到数字将返回NULL。乘以,除以或减去NULL将返回... NULL。空毒操作。比较的工作方式相同-与NULL的比较返回NULL。不是“相等”。不“不相等”。比较返回NULL。因此,我们不想对NULL进行操作或比较,因为它会导致我们的代码做奇怪的事情-大多数情况下,我们会在希望得到其他东西的地方重新获得NULL,这将导致我们挠头,将拳头砸在桌子上,尖叫,大喊,哭泣,大笑(疯狂),考虑从高处调低(您最喜欢的神灵)的愤怒,等等。因此,我们不想对NULL进行操作。因此,为了避免所有这些潜在的不良后果(尽管,您不时知道,我认为对我的一些同事释放出一些愤怒的神是……适当的……但是,仍然... :-)我们使用IFNULL。在这种情况下,IFNULL(SALES_ID, 'NO')的意思是“如果SALES_ID为NULL,请给我回“ NO”。否则,请给我还回SALES_ID的值,无论可能是多少。”

那么,你在那里。祝你好运。