我在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


但是您是正确的:它只是语法上的糖来帮助人类读者。

08-18 14:05