Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona IIF() in SQL Server

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.