MySQL:将 NULL 类型转换为 0

2021-12-31 00:00:00 sql casting mysql

让我们假设下表(例如几个内部连接语句的结果):

Let us suppose the following table (e.g. a result of several inner join statements):

id | column_1 | column_2
------------------------
 1 |  1       | 
 2 |  2       | 2
 3 |          | 3

例如,您可以从以下语句中得到:

Which you could for example get from the following statement:

select a.id, t1.column_1, t2.column_2
from a
left join t1 on a.id = t1.id
left join t2 on a.id = t2.id

现在,如果我想总结 t1.column_1 和 t2.column_2 如下

Now, if i'd like to sum up t1.column_1 and t2.column_2 as follows

select 
    a.id, 
    t1.column_1, 
    t2.column_2,
    (t1.column_1 + t2.column_2) as cumulated
from a
left join t1 on a.id = t1.id
left join t2 on a.id = t2.id

结果如下:

id | column_1 | column_2 | cumulated
------------------------------------
 1 |  1       | NULL     | NULL
 2 |  2       | 2        | 4
 3 |  NULL    | 3        | NULL

我的问题基本上是:有没有办法将 NULL 类型转换为 0 以进行一些数学运算?

My question basically is: is there a way to typecast NULL into 0 in order to do some math?

我尝试过 CONVERT(t1.column_1, SIGNED)CAST(t1.column_1 as SIGNED),但是 NULL 仍然是NULL.

I have tried CONVERT(t1.column_1, SIGNED) and CAST(t1.column_1 as SIGNED), but a NULL stays a NULL.

推荐答案

使用 IFNULL(column, 0) 将列值转换为零.

Use IFNULL(column, 0) to convert the column value to zero.

或者,COALESCE 函数会做同样的事情:COALESCE(column, 0),除了

Alternatively, the COALESCE function will do the same thing: COALESCE(column, 0), except

  1. COALESCE 符合 ANSI,IFNULL 不是
  2. COALESCE 接受任意数量的列/值,并将返回传递给它的第一个非空值.
  1. COALESCE is ANSI-compliant, IFNULL is not
  2. COALESCE takes an arbitrary number of columns/values and will return the first non-null value passed to it.

相关文章