如何为COALESCE定义null或零?

时间:2018-07-30 18:38:25

标签: mysql sql coalesce

您知道,COALESCE返回第一个非-null值。现在我要说的不是-null还是不是0。我该怎么办?

这是我的代码:

SELECT COALESCE(qa2.AcceptedAnswer, qa.AcceptedAnswer) AcceptedAnswer
FROM qanda

2 个答案:

答案 0 :(得分:0)

一种方法使用NULLIF()

SELECT COALESCE(NULLIF(qa2.AcceptedAnswer, 0), qa.AcceptedAnswer) as AcceptedAnswer
FROM qanda;

我个人更喜欢使用CASE表达式,因为我发现意图更加明确:

select (case when qa2.AcceptedAnswer <> 0 then qa2.AcceptedAnswer
             else qa.AcceptedAnswer
        end) as AcceptedAnswer

请注意,不需要显式的NULL比较; <>会解决这个问题。

答案 1 :(得分:0)

您可以在CASE WHEN函数中编写一个COALESCE

SELECT COALESCE(CASE WHEN qa2.AcceptedAnswer<> 0 THEN qa2.AcceptedAnswer END
           ,CASE WHEN qa.AcceptedAnswer <> 0 THEN qa.AcceptedAnswer END)
FROM T

sqlfiddle