Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Espressioni condizionali
PrecedenteFunzioni di manipolazione sequenzeFunzioni ed operatori per arraySuccessivo

9.16. Espressioni condizionali

Questa sezione descrive le espressioni condizionali conformi a SQL disponibili in PostgreSQL™.

[Suggerimento]

Suggerimento

Se ci sono necessità che vanno oltre le possibilità offerte da queste espressioni condizionali si può prendere in cosiderazione la possibilità di scrivere una stored procedure in un linguaggio di programmazione più espressivo.

9.16.1. CASE

L'espressione SQL CASE è una espressione condizionale generica, simile all'istruzione if/else contenuta in altri linguaggi:

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result]
END

La clausola CASE può essere usata dovunque una espressione è valida. L'espressione condizione è una espressione condizionale che restituisce un risultato boolean. Se il risultato è true allora il valore dell'espressione CASE è il risultato che segue la condizione. Se il risultato è falso, ogni successiva clausula WHEN verrà cercata nello stesso modo. Se nessuna condition WHEN è vera allora il valore dell'espressione case è il risultato nella clausola ELSE. Se la clausola ELSE è omessa e nessuna condizione è soddisfatta, il risultato è null.

Un esempio:

SELECT * FROM test;

 a
---
 1
 2
 3


SELECT 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 dato di tutti le espressioni risultato devono essere convertiti ad un singolo tipo di output. Vedere Sezione 10.5, «UNION, CASE, and Related Constructs» per ulteriori dettagli.

C'è una forma «semplice» di espressione CASE che è una variante della forma generale espressa sopra:

CASE expression
    WHEN value THEN result
    [WHEN ...]
    [ELSE result]
END

L'espressione è calcolata e confrontata a tutte le specificazioni valore nella clausula WHEN fino a che non ne viene trovata una che è uguale. Se non viene trovata nessuna uguaglianza, viene restituito il risultato nella clausula ELSE (o un valore null). Questo è simile all'istruzione switch nel linguaggio C.

L'esempio sopra può essere scritta 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

Una espressione CASE non valuta nessuna sottoespressione che non sia necessaria per determinare il risultato. Per esempio, questo è un possibile modo di evitare il fallimento di divisione per zero:

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

9.16.2. COALESCE

COALESCE(value [, ...])

La funzione COALESCE restituisce il primo dei suoi argomenti che non è null. Viene restituito null solo se tutti gli argomenti sono null. Essa è usata spesso per sostituire un valore predefinito con un valore null quando i dati vengono richiamati per visualizzazioni, per esempio:

SELECT COALESCE(description, short_description, '(none)') ...

In modo simile all'epressione CASE, COALESCE non valuta gli argomenti che non sono necessari per determinare il risultato; cioè, gli argomenti alla destra del primo argomento non-null non vengono valutati. Questa funzione standard-SQL fornisce possibilità simili alle funzioni NVL e IFNULL, che vengono usate in alcuni altri sistemi di database.

9.16.3. NULLIF

NULLIF(value1, value2)

La funzione NULLIF restituisce un valore null se valore1 e valore2 sono uguali; altrimenti esso restituisce valore1. Essa può essere usata per effettuare l'operazione inversa dell'esempio COALESCE visto sopra:

SELECT NULLIF(value, '(none)') ...

In questo esempio, se value è (none), viene restituito null, altrimenti viene restituito il valore di value.

9.16.4. GREATEST e LEAST

GREATEST(value [, ...])
LEAST(value [, ...])

Le funzioni GREATEST e LEAST selezionano il più grande o il più piccolo valore da una lista di qualsiasi numero di espressioni. Le espressioni devono essere convertibili ad un tipo dato comune, che sarà il tipo dato del risultato (consultare Sezione 10.5, «UNION, CASE, and Related Constructs» per dettagli). I valori NULL nella lista sono ignorati. Il risultato sarà NULL solo se tutte le espressioni valutano un NULL.

Notare che GREATEST e LEAST non sono standard SQL, ma sono una estensione comune. Alcuni altri database fanno restituire NULL se qualche argomento è NULL, invece che solo quando tutti sono NULL.

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Espressioni condizionali
PrecedenteFunzioni di manipolazione sequenzeFunzioni ed operatori per arraySuccessivo