web-dev-qa-db-fra.com

MySQL: Typecasting NULL à 0

Supposons le tableau suivant (par exemple, le résultat de plusieurs instructions de jointure interne):

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

Que vous pourriez par exemple obtenir de la déclaration suivante:

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

Maintenant, si je voudrais résumer t1.column_1 et t2.column_2 comme suit

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

La reslut ressemblera à ceci:

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

Ma question est essentiellement: existe-t-il un moyen de transtyper NULL en 0 afin de faire des calculs?

J'ai essayé CONVERT(t1.column_1, SIGNED) et CAST(t1.column_1 as SIGNED), mais un NULL reste un NULL.

71
Pierre Spring

Utilisez IFNULL(column, 0) pour convertir la valeur de la colonne à zéro. Alternativement, la fonction COALESCE fera la même chose, sauf que (1) COALESCE est conforme ANSI, IFNULL ne l'est pas et (2) COALESCE prend un nombre arbitraire de colonnes/valeurs et renverra la première valeur non nulle qui lui sera transmise.

139
David Andres