【问题标题】:How to implement ternary conditional operator in MySQL如何在 MySQL 中实现三元条件运算符
【发布时间】:2012-01-20 08:09:01
【问题描述】:

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

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

在 MySQL 中可以吗?

【问题讨论】:

标签: mysql conditional-operator


【解决方案1】:

有两种方法可以实现与三元运算符相同的逻辑:

  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)

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 很遗憾没有速记。如果您只想获得第一个等于 true 的值,则必须检查 null'' 甚至可能是 0。 mySQL 有时有点像公爵夫人
    • 这个是最短的。好一个
    【解决方案3】:

    The documentation是你的朋友;你应该阅读它!

    上面写着:

    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`
    

    【讨论】:

    • +1,但要回答问题:CASE WHEN id IS NULL THEN 0 ELSE id END
    • @MichaelKrelin-hacker:同样的事情,不是吗? IFNULL 更简洁。
    • @MichaelKrelin-hacker:哦,我明白了。
    • 当然,只是为了回答关于三元的问题:)
    • 就我而言,我需要使用IF 而不是IFNULLCOALESCE,因为我正在将数据迁移到不同的供应商数据库并且不想导入非空值,仅将其解释为一般状态。 SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_status 为我工作。
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 2022-12-06
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2010-09-28
    相关资源
    最近更新 更多