9.13.1. CASE
Expresia SQL CASE este o expresie condițională generică, similară instrucțiunilor if/else din alte limbaje:
CASE WHEN condition THEN result END
Clauzele CASE pot fi utilizate oriunde o expresie este validă. condiția este o expresie care returnează un rezultat boolean. Dacă rezultatul este adevărat, atunci valoarea expresiei CASE este rezultatul care urmează condiției. Dacă rezultatul este fals, toate clauzele WHEN ulterioare sunt căutate în același mod. Dacă nicio condiție WHEN nu este adevărată, atunci valoarea expresiei CASE este rezultatul din clauza ELSE. Dacă clauza ELSE este omisă și nici o condiție nu se potrivește, rezultatul este nul.
Un exemplu:
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
Tipurile de date ale tuturor expresiilor de rezultat trebuie să fie convertibile într-un singur tip de ieșire. A se vedea secțiunea 10.5 pentru mai multe detalii.
Următoarea expresie CASE „simplă” este o variantă specializată a formei generale de mai sus:
CASE expression WHEN value THEN result END
Expresia este calculată și comparată cu toate specificațiile de valoare din clauzele WHEN până când se găsește una care este egală. Dacă nu se găsește nicio potrivire, se returnează rezultatul din clauza ELSE (sau o valoare nulă). Acest lucru este similar cu instrucțiunea switch
din C.
Exemplul de mai sus poate fi scris folosind simpla sintaxă 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
O expresie CASE nu evaluează nicio subexpresie care nu este necesară pentru a determina rezultatul. De exemplu, acesta este un mod posibil de a evita un eșec al împărțirii la zero:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;