【发布时间】:2011-03-14 00:40:23
【问题描述】:
我有一个选择语句,我想让选择像这样有条件:
IFNULL(field_a, field_a, field_b)
以便它检查字段 a。如果 a 为 null,则选择字段 b。
这可能吗?
【问题讨论】:
-
也许 U 混合了 IFNULL 和 NULLIF。 U need IFNULL: "如果 expr1 不为 NULL,IFNULL() 返回 expr1;否则返回 expr2。"
我有一个选择语句,我想让选择像这样有条件:
IFNULL(field_a, field_a, field_b)
以便它检查字段 a。如果 a 为 null,则选择字段 b。
这可能吗?
【问题讨论】:
使用COALESCE:
SELECT COALESCE(field_a, field_b)
COALESCE 是一个 ANSI 标准函数,它返回指定列列表中的第一个非空值,从左到右处理列。所以在示例中,如果field_a 为空,则将显示field_b 值。但是,如果指定的列中没有非空值,则此函数将返回 NULL。
它在 MySQL(我在 4.1 上使用过)、SQL Server(自 v2000 起)、Oracle 9i+ 上受支持...
【讨论】:
IF() is much more readable.
还有另一种给猫剥皮的方法(灵活,不只是空比较)...
select if(field_a is not null, field_a, field_b) from...
【讨论】:
Select if(name is not null, CONCAT('name is : ',name),'');
select IFNULL(column, 'default') 也可以。见这里:sqlfiddle.com/#!9/14b752/1/0
【讨论】:
MySQL IFNULL() 的语法和示例
语法
IFNULL函数的语法是:
IFNULL(expression_1,expression_2);
SELECT
name, IFNULL(businessphone, homephone) phone
FROM
users;
#The above query return this result from users table
+------------+-----------+----------+-----------
| id | name | phone |
+------------+-----------+----------+-----------
| 5 | Tommy Hill | (541) 754-3009 |
| 6 | John Smith | (541) 754-3110 |
| 10 | Mark Greenspan | (541) 754-3111 |
| 11 | Kelvin Row | (541) 754-3111 |
+------------+-----------+----------+-----------
【讨论】: