在MySQL中将null替换为0

86

我在MySQL操作的结果中得到了NULL值。

是否存在一种将NULL值转换为0的方法?

6个回答

129
是的,可以使用COALESCE函数。
SELECT COALESCE(null_column, 0) AS null_column FROM whatever;

COALESCE会遍历您提供的值列表,并返回第一个非空值。

3
COALESCE 是 ANSI 标准,受 SQL Server 2000+、Oracle 9i+、MySQL 4.1+ 支持,不确定 PostgreSQL 或 SQLite 的版本支持情况。 - OMG Ponies
1
MySQL在标题中提到了,我为它添加了一个标签。 - D'Arcy Rittich
2
我认为每个带有SQL接口的3VL数据库都支持coalesce()。比如说,MySQL 3.23就支持该函数,而这已经是最基础的数据库之一了。 - Evan Carroll

96

我添加这个答案是因为没有人提到 IFNULL 函数

你可以使用IFNULL

SELECT IFNULL(column_name, 0) FROM table_name;

IFNULL函数将返回列的值(如果它不是NULL),否则将返回传递的第二个参数(在本例中为0)。


谢谢,MySQL中运行完美。 - iarroyo
这只是选择和替换,而不是真正更新表。 - tedioustortoise
我可以使用多列来完成吗? - Xin Niu
@XinNiu 是的,你可以。SELECT IFNULL(column1, column2) FROM table 或者 SELECT IFNULL(column1, 0) AS alias1, IFNULL(column2, 0) AS alias2 FROM table。但是如果你想在一个表达式中使用超过两个列,那么你需要使用 COALESCE,像这样 SELECT COALESCE(column1, column2, column3, column4, 0) FROM tableCOALESCE 将返回参数中第一个非空值。 - Arif

26

如果您在现有的表格布局中出现了空值并且想要零值,则可以使用以下解决方案:

UPDATE `table` SET `somefield`=0 WHERE `somefield` is null

2
这是最好的答案。 - Barney Chambers
这正是我想要的..谢谢。 - majurageerthan
我差点被那个被接受的答案骗了。这正是我想要的。谢谢! - Tom

8

有一个COALESCE方法,它返回第一个非空参数,在您的情况下:

COALESCE(field, 0)

但如果您需要更多,您可以使用这个:
COALESCE(field1, field2, 0)

4

MySQL:

SELECT COALESCE(Mycolumn, 0);

0

你可以通过强制类型转换将0值放入你的插入输入方法中:(int)0


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