9.13.1. CASE

SQL:n CASE-lauseke on yleinen ehdollinen lauseke, joka on samanlainen kuin muiden kielten if/else-lausekkeet:

CASE WHEN condition THEN result END

CASE-lausekkeita voidaan käyttää kaikkialla, missä lauseke on voimassa. condition on lauseke, joka palauttaa boolean-tuloksen. Jos tulos on tosi, CASE-lausekkeen arvo on ehtoa seuraava tulos. Jos tulos on epätosi, kaikki seuraavat WHEN-lausekkeet etsitään samalla tavalla. Jos mikään WHEN-ehto ei ole tosi, case-lausekkeen arvo on ELSE-lausekkeen tulos. Jos ELSE-lauseke jätetään pois eikä mikään ehto täsmää, tulos on nolla.

Esimerkki:

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

Kaikkien tuloslausekkeiden tietotyyppien on oltava muunnettavissa yhdeksi tulostyypiksi. Katso lisätietoja luvusta 10.5.

Seuraava ”yksinkertainen” CASE-lauseke on erikoistunut muunnelma yllä olevasta yleisestä muodosta:

CASE expression WHEN value THEN result END

Lauseke lasketaan ja sitä verrataan kaikkiin WHEN-lausekkeiden arvomäärityksiin, kunnes löydetään yksi vastaava. Jos vastaavaa ei löydy, palautetaan ELSE-lausekkeessa oleva tulos (tai nolla-arvo). Tämä on samanlainen kuin switch-lauseke C:ssä.

Yllä oleva esimerkki voidaan kirjoittaa käyttämällä yksinkertaista CASE-syntaksia:

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

CASE-lauseke ei evaluoi mitään sellaisia alilausekkeita, joita ei tarvita tuloksen määrittämiseen. Esimerkiksi tämä on mahdollinen tapa välttää jakovirhe nollalla:

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

Vastaa

Sähköpostiosoitettasi ei julkaista.