2012-11-05 17 views
17

Ho due campi che sto confrontando con la funzione di MySQL COALESCE(). Ad esempio, COALESCE(Field1, Field2). Il problema è che Field1 è talvolta vuoto ma non null; poiché non è null, COALESCE() seleziona Field1, anche se è vuoto. In tal caso, ho bisogno di selezionare Field2.COALESCE() per campi vuoti (ma non null)

So che posso scrivere un'istruzione if-then-else (CASE) nella query per verificarlo, ma esiste una funzione semplice come COALESCE() per i campi vuoti ma non nulli?

risposta

25
SELECT IFNULL(NULLIF(Field1,''),Field2) 

NULLIF restituisce un NULL se Field1 è vuoto, mentre IFNULL ritorna Field1 se non è vuota o NULL e Campo2 altrimenti.

+4

Potrei fare lo stesso, ma con COALESCE corretto? 'COALESCE (NULLIF (Field1, ''), Field2)' - esiste una differenza di carico di velocità/elaborazione? –

+0

Interessante risposta a 'COALESCE' rispetto a' IFNULL' qui: http://stackoverflow.com/questions/4747877/mysql-ifnull-vs-coalesce-which-is-faster –

+0

@John correct http://stackoverflow.com/ a/27485689/1654265 –

6

È possibile utilizzare un CASE espressione:

CASE WHEN Field1 <> '' THEN Field1 ELSE Field2 END 
+0

Ecco cosa intendevo per if-then-else; Stavo cercando una soluzione più pulita, ad una linea –

+3

Ora è una riga :) –

6

So di essere in ritardo alla festa qui, ma c'è un modo per farlo pur utilizzando COALESCE(). Questo funzionerebbe se il tuo valore fosse NULL o "".

Select COALESCE(NULLIF(Field1,''), Field2) 
+1

Vedere il commento sulla risposta selezionata :) –

+0

Bene, eccoci! Non l'ho visto. – Beachhouse