MySQL: Typecasting NULL auf 0


82

Nehmen wir die folgende Tabelle an (z. B. ein Ergebnis mehrerer innerer Join-Anweisungen):

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

Was Sie zum Beispiel aus folgender Aussage erhalten könnten:

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

Nun, wenn ich t1.column_1 und t2.column_2 wie folgt zusammenfassen möchte

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

Das Reslut sieht wie folgt aus:

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

Meine Frage ist im Grunde: Gibt es eine Möglichkeit, NULL in 0 zu tippen, um etwas zu rechnen?

Ich habe es versucht CONVERT(t1.column_1, SIGNED)und CAST(t1.column_1 as SIGNED), aber ein NULLbleibt ein NULL.

Antworten:


154

Verwenden Sie IFNULL(column, 0)diese Option , um den Spaltenwert in Null zu konvertieren. Alternativ führt die COALESCE-Funktion dasselbe aus, außer dass (1) COALESCEANSI-kompatibel IFNULList, nicht und (2) COALESCEeine beliebige Anzahl von Spalten / Werten verwendet und den ersten an sie übergebenen Nicht-Null-Wert zurückgibt.


und Koaleszenz kann mehr als einen Wert haben?
ante.sabo

10
Ja ... also gibt COALESCE (Spalte1, Spalte2, 0) den ersten Nicht-Nullwert dieser Werte zurück. Beachten Sie, dass dies horizontal und nicht vertikal funktioniert. Die Spalten müssen zur selben Tabellenzeile gehören.
David Andres

@rexem: Danke, das ist sehr nett von dir zu sagen. Sehr geschätzt!
David Andres

@ David Andres Eine Million Dankeschön. Wenn ich nur ein zweites Mal abstimmen könnte.
Geschichte
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.