In SQL Server, IIF()
funzione (da non confondere con IF
istruzione) è una funzione condizionale che restituisce il secondo o il terzo argomento in base alla valutazione del primo argomento.
È un modo abbreviato per scrivere un CASE
espressione. È logicamente equivalente a CASE WHEN X THEN Y ELSE Z END
assumendo IIF(X, Y, Z)
.
IIF()
è l'abbreviazione di IF immediato .
Sintassi
La sintassi è questa:
IIF ( boolean_expression, true_value, false_value )
Dove:
- espressione_booleana è l'espressione da valutare.
- vero_valore viene restituito se espressione_booleana è vero.
- valore_falso viene restituito se espressione_booleana è falso o sconosciuto.
Come con CASE
espressioni, IIF()
le istruzioni possono essere nidificate solo fino al livello massimo di 10.
Esempio
Ecco un esempio di base per dimostrare come IIF()
funziona.
SELECT IIF( 1 < 2, 'True', 'False' );
Risultato:
True
In questo caso, l'espressione da valutare è 1 < 2
. È vero che 1 è minore di 2, quindi è stato restituito il secondo argomento.
Questo equivale a fare quanto segue.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Risultato:
True
In questi esempi ho usato le parole “Vero” e “Falso” ma avrei potuto usare qualsiasi cosa.
Ad esempio, avrei potuto farlo invece:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Risultato:
Fail
Oppure potrebbe essere qualcosa di completamente rimosso da una risposta di tipo binario "vera" o "falsa".
Ad esempio:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Risultato:
Deadlift
Test di una variabile
In pratica, normalmente testerai variabili, colonne, ecc. piuttosto che costanti come negli esempi precedenti.
Ecco un esempio che verifica una variabile.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Risultato:
Rich!
Esempio di database
Ecco un esempio che utilizza le colonne di un database.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Risultato:
+----------------+--------------+-------------+ | Name | Population | Big/Small | |----------------+--------------+-------------| | Kabul | 1780000 | Big City | | Qandahar | 237500 | Small City | | Herat | 186800 | Small City | | Mazar-e-Sharif | 127800 | Small City | | Amsterdam | 731200 | Big City | | Rotterdam | 593321 | Big City | | Haag | 440900 | Big City | | Utrecht | 234323 | Small City | | Eindhoven | 201843 | Small City | | Tilburg | 193238 | Small City | +----------------+--------------+-------------+
Funzioni IIF() nidificate
Ecco un esempio di annidamento di un IIF()
funzione. Per "nidificazione" intendo che passo un altro IIF()
funzione come argomento per l'esterno IIF()
funzione.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Risultato:
Wealthy
Puoi annidare IIF()
funziona fino a un livello di 10.