9.13.1. CASE

L’espressione SQL CASE è un’espressione condizionale generica, simile alle dichiarazioni if/else in altri linguaggi:

CASE WHEN condition THEN result END

Le clausole CASE possono essere usate ovunque un’espressione sia valida. condition è un’espressione che restituisce un risultato booleano. Se il risultato è vero allora il valore dell’espressione CASE è il risultato che segue la condizione. Se il risultato è falso qualsiasi clausola WHEN successiva viene cercata nello stesso modo. Se nessuna condizione WHEN è vera, allora il valore dell’espressione CASE è il risultato della clausola ELSE. Se la clausola ELSE è omessa e nessuna condizione corrisponde, il risultato è nullo.

Un esempio:

SELECT * FROM test; a--- 1 2 3SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case---+------- 1 | one 2 | two 3 | other

I tipi di dati di tutte le espressioni di risultato devono essere convertibili in un unico tipo di output. Vedere la Sezione 10.5 per maggiori dettagli.

La seguente espressione CASE “semplice” è una variante specializzata della forma generale di cui sopra:

CASE expression WHEN value THEN result END

L’espressione viene calcolata e confrontata con tutte le specifiche di valore nelle clausole WHEN finché non ne viene trovata una che sia uguale. Se non viene trovata nessuna corrispondenza, viene restituito il risultato della clausola ELSE (o un valore nullo). Questo è simile all’istruzione switch in C.

L’esempio sopra può essere scritto usando la semplice sintassi CASE:

SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; a | case---+------- 1 | one 2 | two 3 | other

Un’espressione CASE non valuta le sottoespressioni che non sono necessarie per determinare il risultato. Per esempio, questo è un modo possibile per evitare un errore di divisione per zero:

SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.