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


Answers:



53

该文档是您的朋友;您应该阅读它!

它说:

IFNULL(expr1,expr2)

如果expr1不是NULL,则IFNULL()返回expr1; 否则返回 expr2

然后是很多例子。这等效于将三元条件与NULL比较对象和比较对象用作第二个操作数;使用符号?:不会带您到达那里与任何事物都不相关。

因此,在您的情况下:

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
迈克尔·克雷林(Michael Krelin)-黑客2011年

@ MichaelKrelin-hacker:一样,不是吗?而且IFNULL更短。
Lightness Races in Orbit

@ MichaelKrelin-hacker:哦,知道了。
Lightness Races in Orbit

当然,只是回答有关三元的问题:)
迈克尔·克雷林(Michael Krelin)-黑客2011年

就我而言,我需要使用IF而不是IFNULL或者COALESCE因为我正在将数据迁移到其他供应商数据库,并且不想导入非空值,而只是将其解释为一般状态。SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_status为我工作。
亚当·埃尔索达尼

22

您可以通过两种方式实现与三元运算符相同的逻辑:

  1. 使用IF功能,例如。IF(expression, true result, false result)
  2. 使用CASE表达式,例如。

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    

当您检查NULL时,您可以使用 IFNULLCOALESCE函数,例如。

IFNULL(ID, 0)
COALESCE(ID, 0)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.