如何为coalesce定义null或零?

ckocjqey  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(371)

如你所知, COALESCE 返回第一个not- null 价值观。现在我要说的是,也不是- null 还是不- 0 . 我该怎么做?
这是我的密码:

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

t5zmwmid1#

一种方法使用 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 不需要比较;这个 <> 处理好了。

juud5qan

juud5qan2#

你可以写一个 CASE WHENCOALESCE 功能。

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

sqlfiddle公司

相关问题