首页 > 解决方案 > 如何为 COALESCE 定义 null 或零?

问题描述

如您所知,COALESCE返回第一个非null值。现在我需要说,要么不 -null要么不 - 0。我怎样才能做到这一点?

这是我的代码:

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

标签: mysqlsqlcoalesce

解决方案


一种方法使用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不需要显式比较;的<>照顾。


推荐阅读