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

Hvordan IIF() virker i SQL Server

I SQL Server er IIF() funktion (ikke at forveksle med IF statement) er en betinget funktion, der returnerer det andet eller tredje argument baseret på evalueringen af ​​det første argument.

Det er en kortfattet måde at skrive en CASE på udtryk. Det svarer logisk til CASE WHEN X THEN Y ELSE Z END forudsat IIF(X, Y, Z) .

IIF() er en forkortelse for Immediate IF .

Syntaks

Syntaksen ser sådan ud:

IIF ( boolean_expression, true_value, false_value )

Hvor:

  • boolesk_udtryk er det udtryk, der skal evalueres.
  • true_value returneres hvis boolean_expression er sandt.
  • falsk_værdi returneres hvis boolean_expression er falsk eller ukendt.

Som med CASE udtryk, IIF() sætninger kan kun indlejres op til det maksimale niveau på 10.

Eksempel

Her er et grundlæggende eksempel for at demonstrere, hvordan IIF() virker.

SELECT IIF( 1 < 2, 'True', 'False' );

Resultat:

True

I dette tilfælde er udtrykket, der skal evalueres, 1 < 2 . Det er rigtigt, at 1 er mindre end 2, så det andet argument blev returneret.

Dette svarer til at gøre følgende.

SELECT 
  CASE WHEN 1 < 2 THEN 'True'
    ELSE 'False'
  END;

Resultat:

True

I disse eksempler brugte jeg ordene "True" og "False", men jeg kunne have brugt hvad som helst.

For eksempel kunne jeg have gjort dette i stedet:

SELECT IIF( 1 < 2, 'Fail', 'Pass' );

Resultat:

Fail

Eller det kan være noget helt fjernet fra et "sandt" eller "falskt" svar af binær type.

For eksempel:

SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );

Resultat:

Deadlift

Test af en variabel

I praksis ville du normalt teste variabler, kolonner osv. i stedet for konstanter som i de foregående eksempler.

Her er et eksempel, der tester en variabel.

DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');

Resultat:

Rich!

Databaseeksempel

Her er et eksempel, der bruger kolonner fra en database.

SELECT TOP(10)
    Name,
    Population,
    IIF( 
        Population > 400000, 
        'Big City', 
        'Small City' 
        ) AS 'Big/Small'
FROM city;

Resultat:

+----------------+--------------+-------------+
| 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  |
+----------------+--------------+-------------+

Indlejrede IIF()-funktioner

Her er et eksempel på at indlejre en IIF() fungere. Med "indlejring" mener jeg, at jeg sender en anden IIF() fungere som et argument til den ydre IIF() funktion.

DECLARE @bankBalance int = 123;
SELECT IIF(
    @bankBalance > 100, 
    IIF(@bankBalance > 150, 'Rich!', 'Wealthy'), 
    'Poor'
    );

Resultat:

Wealthy

Du kan indlejre IIF() fungerer op til et niveau på 10.


  1. Sådan implementeres Chamilo MariaDB-databasen for høj tilgængelighed

  2. Sådan opretter du relationer i MySQL

  3. PostgreSQL, træk og skift

  4. Importer database til MySQL eller MariaDB