如何在MySQL中实现三元条件运算符

111

我想在MySQL中实现三元条件运算符。我有一个表,其中存在一个字段id。它的值可能为null。我想以三元条件格式显示id,如下所示:

select id = id == null ? 0 : id;

在MySQL中是否可能实现?


可能是重复的问题:如何在MySQL选择语句中编写条件? - Lightness Races in Orbit
3个回答

187

试试这个:

select if(Id is null, 0, id) as Id;

1
很遗憾没有速记法。如果您只想获取第一个等于 true 的值,您必须检查 null 或 '',甚至可能是 0。mySQL 有时候会有点难搞。 - cronoklee
这是它们中最短的一个。不错。 - Sohan Arafat

61

文档 是你的朋友,你应该阅读它!

它说:

IFNULL(expr1,expr2)
如果expr1不是NULLIFNULL()函数将返回expr1;否则它将返回expr2。这相当于使用三元条件运算符并将比较的第二个操作数作为比较的主体;它没有使用?:符号也能达到目的,但这并不是什么关键点。
因此,在您的情况下:
SELECT IFNULL(`id`, 0) FROM `table`

如果你非常渴望明确提供三个操作数(为什么?!),那么请切换到IF

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`

4
+1,但为了回答这个问题:CASE WHEN id IS NULL THEN 0 ELSE id END 的意思是,如果id为空,则返回0,否则返回id本身。 - Michael Krelin - hacker
@MichaelKrelin-hacker:哦,我明白了。 - Lightness Races in Orbit
当然,只是回答有关三元运算符的问题 :) - Michael Krelin - hacker
在我的情况下,我需要使用 IF 而不是 IFNULLCOALESCE,因为我正在将数据迁移到另一个供应商的数据库,并且不想导入非空值,只想将其解释为通用状态。SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_status 对我有用。 - Adam Elsodaney
1
在SO上,“阅读文档”从来不是正确的答案。你不仅在回答提问者,还在回答未来搜索到这个问题的所有人。(此外,MySQL的文档作为快速参考真的很糟糕。) - Glenn Maynard
显示剩余2条评论

27

你可以用两种方式将相同的逻辑实现为三元运算符:

  1. 使用 IF 函数,例如 IF(表达式, 当为真时返回值, 当为假时返回值)
  2. 使用 CASE 表达式,例如

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    
    当你需要检查 NULL 值时,你可以使用 IFNULLCOALESCE 函数,例如:
    IFNULL(ID, 0)
    COALESCE(ID, 0)
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接