我在SQL生涯中第一次是对NULLIF()
的琐碎但真正的使用。它是我刚刚忽略的广泛使用的工具,还是几乎被人们遗忘的SQL怪癖?它存在于所有主要的数据库实现中。
如果任何人都需要刷新,则NULLIF(A, B)
返回第一个值,除非它等于第二个值,在这种情况下,它将返回NULL
。等效于以下CASE
语句:
CASE WHEN A <> B OR B IS NULL THEN A END
或者,使用C样式的语法:
A == B || A == null ? null : A
到目前为止,我发现的唯一不平凡的示例是从聚合函数中排除特定值:
SELECT COUNT(NULLIF(Comment, 'Downvoted'))
这样做的局限性是只允许跳过一个值。
CASE
,虽然更详细,但可以使用表达式。作为记录,我发现的用途是抑制“最新更改”列的值(如果它等于第一个更改):
SELECT Record, FirstChange, NULLIF(LatestChange, FirstChange) AS LatestChange
这仅在减少人类消费者的视觉混乱方面有用。
最佳答案
我认为
NULLIF(A, B)
是语法糖
CASE WHEN A = B THEN NULL ELSE A END
但是您是正确的:它只是语法上的糖来帮助人类读者。