【发布时间】:2012-01-20 08:09:01
【问题描述】:
我想在 MySQL 中实现三元条件运算符。我有一张表,其中存在一个字段 id。它的值可能为空。我想以这样的三元条件格式显示id:
select id = id == null ? 0 : id;
在 MySQL 中可以吗?
【问题讨论】:
标签: mysql conditional-operator
我想在 MySQL 中实现三元条件运算符。我有一张表,其中存在一个字段 id。它的值可能为空。我想以这样的三元条件格式显示id:
select id = id == null ? 0 : id;
在 MySQL 中可以吗?
【问题讨论】:
标签: mysql conditional-operator
有两种方法可以实现与三元运算符相同的逻辑:
IF 函数,例如。 IF(expression, true result, false result)
使用CASE 表达式,例如。
CASE WHEN expression THEN <true result> ELSE <false_result> END
当您检查 NULL 时,您可以使用 IFNULL 或 COALESCE 函数,例如。
IFNULL(ID, 0)
COALESCE(ID, 0)
【讨论】:
试试这个:
select if(Id is null, 0, id) as Id;
【讨论】:
null 或 '' 甚至可能是 0。 mySQL 有时有点像公爵夫人
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`
【讨论】:
CASE WHEN id IS NULL THEN 0 ELSE id END
IFNULL 更简洁。
IF 而不是IFNULL 或COALESCE,因为我正在将数据迁移到不同的供应商数据库并且不想导入非空值,仅将其解释为一般状态。 SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_status 为我工作。