【问题标题】:MySQL: Typecasting NULL to 0MySQL:将 NULL 类型转换为 0
【发布时间】:2009-09-17 21:01:58
【问题描述】:

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

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

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

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 如下

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 以便进行一些数学运算?

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

【问题讨论】:

    标签: sql mysql casting


    【解决方案1】:

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

    另外,COALESCE 函数也会做同样的事情:COALESCE(column, 0),除了

    1. COALESCE 符合 ANSI,IFNULL 不符合
    2. COALESCE 接受任意数量的列/值,并将返回传递给它的第一个非空值。

    【讨论】:

    • and coalesce 可以有多个值?
    • 是...所以 COALESCE(column1, column2, 0) 将返回这些值的第一个非空值。请记住,这是水平的,而不是垂直的。这些列必须属于同一表格行。
    • @rexem:谢谢,你说的太好了。非常感谢!
    • @David Andres 百万谢谢。如果我能再次投票就好了。
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2014-09-12
    • 2012-01-07
    • 1970-01-01
    • 2018-12-28
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多