MySQL: приведение типа NULL к 0 - PullRequest
70 голосов
/ 18 сентября 2009

Предположим, что следующая таблица (например, результат нескольких внутренних операторов соединения):

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.

1 Ответ

139 голосов
/ 18 сентября 2009

Используйте IFNULL(column, 0) для преобразования значения столбца в ноль. Кроме того, функция COALESCE будет делать то же самое, за исключением того, что (1) COALESCE является ANSI-совместимым, IFNULL - нет, и (2) COALESCE принимает произвольное число столбцов / значений и возвращает первое не в него передается нулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...