2009-09-17 18 views
61

Supponiamo la seguente tabella (ad esempio a seguito di diversi inner join dichiarazioni):MySQL: NULL Typecasting a 0

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

che si poteva per esempio ottenere dal seguente dichiarazione:

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 

Ora, se mi piacerebbe riassumere t1.column_1 e t2.column_2 come segue

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 

Il reslut sarà il seguente:

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

La mia domanda è fondamentalmente: c'è un modo per digitare NULL in 0 per fare un po 'di matematica?

Ho provato CONVERT(t1.column_1, SIGNED) e CAST(t1.column_1 as SIGNED), ma uno NULL rimane uno NULL.

risposta

121

Utilizzare IFNULL(column, 0) per convertire il valore della colonna a zero. In alternativa, la funzione COALESCE farà la stessa cosa, tranne (1) COALESCE è ANSI-compatibile, IFNULL no, e (2) COALESCE prende un numero arbitrario di colonne/valori e restituirà il primo valore non nullo passato ad esso .

+0

e la coalesce può avere più di un valore? –

+7

Sì ... quindi COALESCE (colonna1, colonna2, 0) restituirà il primo non null di questi valori. Ricorda che funziona in orizzontale, non in verticale. Le colonne devono appartenere alla stessa riga della tabella. –

+0

@David: ben fatto. –