我只是对NULLIF()
进行了一次微不足道但真正的使用,这是我职业生涯第一次使用SQL。它是一个我忽略的广泛使用的工具,还是几乎被遗忘的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
这只是因为它减少了人类消费者的视觉混乱。
答案 0 :(得分:5)
我宁愿认为
NULLIF(A, B)
是
的语法糖CASE WHEN A = B THEN NULL ELSE A END
但你是对的:它只是帮助人类读者的语法糖。
答案 1 :(得分:3)
我经常在需要避免除零除外的地方使用它:
SELECT
COALESCE(Expression1 / NULLIF(Expression2, 0), 0) AS Result
FROM …
答案 2 :(得分:2)
三年后,我发现了NULLIF的一个实质用途:使用NULLIF(Field, '')
将空字符串转换为NULL,与Oracle关于“NULL”代表什么的特殊想法等效。
答案 3 :(得分:0)
NULLIF
非常方便。
例:
SELECT(COALESCE(NULLIF(firstColumn, ''), secondColumn) FROM table WHERE this = that
答案 4 :(得分:0)
SUM
和COUNT
具有将空值转换为零的行为。当你想撤消这种行为时,我可以看到NULLIF
很方便。如果事实是我提供的recent answer。如果我记得NULLIF,我可能会编写以下内容
SELECT student,
NULLIF(coursecount,0) as courseCount
FROM (SELECT cs.student,
COUNT(os.course) coursecount
FROM @CURRENTSCHOOL cs
LEFT JOIN @OTHERSCHOOLS os
ON cs.student = os.student
AND cs.school <> os.school
GROUP BY cs.student) t