9.13.1. CASE
De SQL CASE expressie is een generieke voorwaardelijke expressie, vergelijkbaar met if/else statements in andere talen:
CASE WHEN condition THEN result END
CASE clausules kunnen overal worden gebruikt waar een expressie geldig is. conditie is een expressie die een booleaans resultaat retourneert. Als het resultaat waar is, is de waarde van de CASE-uitdrukking het resultaat dat op de voorwaarde volgt. Als het resultaat onwaar is, worden alle volgende WHEN-clausules op dezelfde manier doorzocht. Als geen enkele WANNEER-conditie waar is, is de waarde van de cas-expressie het resultaat in de ELSE-clausule. Als de ELSE-clausule wordt weggelaten en geen voorwaarde overeenkomt, is het resultaat null.
Een voorbeeld:
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
De gegevenstypen van alle resultaatexpressies moeten converteerbaar zijn naar een enkel outputtype. Zie Paragraaf 10.5 voor meer bijzonderheden.
De volgende “eenvoudige” CASE-uitdrukking is een gespecialiseerde variant van de bovenstaande algemene vorm:
CASE expression WHEN value THEN result END
De uitdrukking wordt berekend en vergeleken met alle waardespecificaties in de WHEN-clausules totdat er een wordt gevonden die gelijk is. Als er geen overeenkomst wordt gevonden, wordt het resultaat in de ELSE-clausule (of een nulwaarde) geretourneerd. Dit is vergelijkbaar met het switch
statement in C.
Het bovenstaande voorbeeld kan worden geschreven met behulp van de eenvoudige CASE syntaxis:
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
Een CASE expressie evalueert geen subexpressies die niet nodig zijn om het resultaat te bepalen. Dit is bijvoorbeeld een mogelijke manier om een fout bij division-by-zero te voorkomen:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;