89 votes

MySQL: Typecasting NULL à 0

Supposons le tableau suivant (par exemple, à la suite de plusieurs inner join consolidés):

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

Qui, par exemple, vous pouvez obtenir à partir 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 revenir sur 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

Le reslut présentera comme suit:

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

Ma question est en fait: est-il un moyen de transtypage NULLE en 0 afin de faire un peu de maths?

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

165voto

David Andres Points 13569

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X