sql >> Databasteknik >  >> RDS >> Sqlserver

Hur IIF() fungerar i SQL Server

I SQL Server, IIF() funktion (inte att förväxla med IF statement) är en villkorlig funktion som returnerar det andra eller tredje argumentet baserat på utvärderingen av det första argumentet.

Det är ett kortfattat sätt att skriva ett CASE uttryck. Det motsvarar logiskt sett CASE WHEN X THEN Y ELSE Z END antar IIF(X, Y, Z) .

IIF() är en förkortning för Omedelbar OM .

Syntax

Syntaxen ser ut så här:

IIF ( boolean_expression, true_value, false_value )

Var:

  • boolean_expression är uttrycket som ska utvärderas.
  • true_value returneras om boolean_expression är sant.
  • falskt_värde returneras om boolean_expression är falsk eller okänd.

Som med CASE uttryck, IIF() satser kan bara kapslas upp till maxnivån 10.

Exempel

Här är ett grundläggande exempel för att visa hur IIF() fungerar.

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

Resultat:

True

I det här fallet är uttrycket som ska utvärderas 1 < 2 . Det är sant att 1 är mindre än 2 så det andra argumentet returnerades.

Detta motsvarar att göra följande.

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

Resultat:

True

I dessa exempel använde jag orden "Sant" och "False" men jag kunde ha använt vad som helst.

Jag kunde till exempel ha gjort så här istället:

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

Resultat:

Fail

Eller det kan vara något helt borttaget från ett "sant" eller "falskt" svar av binär typ.

Till exempel:

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

Resultat:

Deadlift

Testa en variabel

I praktiken skulle du normalt testa variabler, kolumner etc snarare än konstanter som i de tidigare exemplen.

Här är ett exempel som testar en variabel.

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

Resultat:

Rich!

Databasexempel

Här är ett exempel som använder kolumner från en databas.

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

Inkapslade IIF()-funktioner

Här är ett exempel på att kapsla en IIF() fungera. Med "kapsla" menar jag att jag skickar en annan IIF() fungerar som ett argument till den yttre IIF() funktion.

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

Resultat:

Wealthy

Du kan kapsla IIF() fungerar upp till en nivå av 10.


  1. Tidsgränsen för att få lås väntan har överskridits; försök starta om transaktionen trots att jag inte använder en transaktion

  2. SQL Server JDBC-fel på Java 8:Drivrutinen kunde inte upprätta en säker anslutning till SQL Server genom att använda Secure Sockets Layer (SSL) kryptering

  3. SQL Välj Kommande födelsedagar

  4. ASIN() Funktion i Oracle