9.13.1. CASE

Wyrażenie SQL CASE jest ogólnym wyrażeniem warunkowym, podobnym do instrukcji if/else w innych językach:

CASE WHEN condition THEN result END

Klauzule CASE mogą być użyte wszędzie tam, gdzie wyrażenie jest poprawne. warunek jest wyrażeniem, które zwraca wynik typu boolean. Jeśli wynik jest prawdziwy, to wartością wyrażenia CASE jest wynik, który następuje po warunku. Jeżeli wynik jest fałszywy, to wszystkie kolejne klauzule WHEN są przeszukiwane w ten sam sposób. Jeżeli żaden warunek WHEN nie jest prawdziwy, to wartością wyrażenia case jest wynik w klauzuli ELSE. Jeśli klauzula ELSE jest pominięta i żaden warunek nie pasuje, wynikiem jest null.

Przykład:

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

Typy danych wszystkich wyrażeń wynikowych muszą być konwertowalne na jeden typ wyjściowy. Zobacz punkt 10.5, aby uzyskać więcej szczegółów.

Następujące „proste” wyrażenie CASE jest wyspecjalizowanym wariantem powyższej formy ogólnej:

CASE expression WHEN value THEN result END

Wyrażenie jest obliczane i porównywane ze wszystkimi specyfikacjami wartości w klauzulach WHEN, dopóki nie zostanie znaleziona jedna, która jest równa. Jeśli nie zostanie znalezione żadne dopasowanie, zwracany jest wynik w klauzuli ELSE (lub wartość null). Jest to podobne do instrukcji switch w języku C.

Powyższy przykład może być napisany przy użyciu prostej składni 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

Wyrażenie CASE nie ocenia żadnych podwyrażeń, które nie są potrzebne do określenia wyniku. Na przykład, jest to możliwy sposób na uniknięcie błędu dzielenia przez zero:

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.