SQL Server 2012 introducerade en ny inbyggd logisk funktion SQL IIF. Det är en stenografi form av skrivfall uttalande logik eller om-annars logik.
vi utforskade Kundcasesatsen i SQL i min tidigare artikel. Vi använder ett kundcaseutlåtande för att returnera ett resultat baserat på det definierade villkoret. Det liknar en IF..ELSE … sedan uttalande utvärderar ett uttryck och returnerar utdata. Kundcasesatsen är tillgänglig i nästan alla versioner av SQL Server.
låt oss utforska denna SQL IIF-funktion i den här artikeln.,
SQL IIF Uttalande översikt
Vi använder följande format för att skriva Case-uttryck logik i SQL-frågor
VÄLJ FALLET Uttryck När expression1 Sedan Result1 När expression2 Sedan Result2 … ANNARS Resultat SLUTET
Vi kan skriva denna kod med hjälp av SQL-IIF uttalande syntax som följande.
IIF(boolean_expression, true_value, false_value)
- Boolean_expression: den första parametern i SQL IIF-satsen är ett booleskt uttryck., Det borde vara ett giltigt booleskt uttryck annat vi får ett undantag
- True_Value: om boolean_expression är sant returnerar det värde som anges i true_value-parametern
- False_Value: om boolean_expression är falskt returnerar det värde som anges i false_value-parametern
låt oss utforska SQL IIF-satsen med hjälp av exempel.
exempel 1: SQL IIF-sats för att jämföra heltalvärden
i följande exempel returnerar det booleska uttrycket falskt ( 2 > 3 är inte sant)., Due to this, it returns the value specified in the false_value parameter.
1
|
SELECT IIF(2 > 3, ’TRUE’, ’FALSE’ )
|
Similarly, if the condition is TRUE (5>3 is TRUE) so it returns the value of true_value parameter.,
1
|
SELECT IIF(5 > 3, ’TRUE’, ’FALSE’ )
|
Example 2: SQL IIF statement with variables
In the following example, we specified two integer variables and assigned values. We use variables for comparison in the IIF statement.,
1
2
|
DECLARE @A INT = 80, @B INT = 70
SELECT IIF(@A >= @B, ’PASS’, ’FAIL’ )
|
The specified condition (80>70) is TRUE, so it returns the value PASS.,
exempel 3: SQL IIF-sats för att jämföra två strängar
i följande exempel vill vi jämföra strängdata med SQL IIF-sats. Vi vill veta den person som gillar baserat på personnamnet.,
1
2
|
DECLARE @Person Varchar(100) = ’Raj’
SELECT IIF(@Person=’Raj’,’Likes Apple’,’NA’)
|
We can specify multiple conditions in SQL IIF statement as well.,i>
1
2
|
DECLARE @Person Varchar(100) = ’Raj’
SELECT IIF(@Person in(’Raj’, ’Mohan’),’Likes Apple’,’Likes Orange’)
|
The query should return Likes Orange if the person name is not in the IN clause., I följande exempel finns inte person Vinay i variabeln @Person, så det returnerar värde för en falsk klausul.
exempel 4: kapslade SQL IIF-sats
Vi kan använda kapslade SQL IIF-sats samt för att ange flera villkor
i denna SQL IIF-funktion kontrollerar den för det första villkoret och om villkoret är sant returnerar det värdet. I vårt fall är det falskt (Person Vinay matchar inte med Raj). det kontrollerar för det andra villkoret och returnerar resultat om det är sant.,
om inget av villkoren är sant returnerar det falskt standardmeddelande.
exempel 5: SQL IIF-sats med en tabellkolumn
i föregående exempel anger vi antingen värden direkt i IIF-satsen eller specificerade variabler för den. Vanligtvis vill vi använda den med befintliga data i en SQL-tabell. Vi kan använda IIF-uttalandet med en tabellkolumn också.,
i följande exempel vill vi veta leverantörsnamnet från tabellen PurchaseOrders i WideWorldImporters-databasen.
om leverantörsnamnet inte finns för ett visst leverantörs-id returnerar det angivna falska värdet i SQL IIF-satsen.
exempel 6: SQL IIF-sats med en tabellkolumn och aggregeringsfunktion
exempel 7: SQL IIF-sats och datatypspreferens
Vi kan ha olika datatyper för resultaten., Om vi har olika datatyper som anges i resultatförhållandena ger SQL Server Den högsta prejudikat datatypen. I följande exempel, för det falska tillståndet(11>19), blir resultatet false_value-argumentet, dvs. 100. Det borde vara av e-heltal datatyp, men vi får utmatningen 40.0 eftersom det andra argumentet float (2.6) har hög prioritet än ett heltal.,
1
|
SELECT IIF(11 > 19, 2.6, 40)
|
You can check the data type precedence in the following image
Example 8: SQL IIF with NULL values
We should be careful in NULL values inside the SQL IIF function.,
1
2
3
|
SELECT
IIF(100 > 99, NULL, NULL) AS Result;
|
We cannot specify NULL in both the true and false arguments. We get the following error message.,
Msg 8133, nivå 16, delstat 1, rad 1 Minst ett av resultatuttrycken i en FALLSPECIFIKATION måste vara ett annat uttryck än NOLLKONSTANTEN.
i felmeddelandet kan du se att det ger information om KUNDCASESPECIFIKATIONEN men vi använde SQL IIF-funktionen. Vi kommer att titta på detta i nästa exempel.
Du bör ange minst ett av ett sant eller falskt argument.,
1
2
|
SELECT
IIF(100 > 99, ’Hello’, NULL) AS Result;
|
The similarity between SQL IIF statement and CASE Statement
In the introduction of SQL IIF Statement, we mentioned that it is a shorthand form of writing CASE statement logic or IF-ELSE logic., Ja, det är sant. Internt SQL Server konverterar satsen till KUNDCASESATSEN och körs. Vi kan kontrollera det med hjälp av den faktiska exekveringsplanen för en fråga.
utför frågan från Exempel 6 med en verklig exekveringsplan.
i den faktiska exekveringsplanen, titta på egenskaperna hos Compute Scalar. Du kan se att den utför KUNDCASEFÖRKLARINGEN internt.
slutsats
i den här artikeln utforskade vi SQL IIF-uttalandet som är ett nytt sätt att skriva KUNDCASEFÖRKLARINGAR relaterade villkor., Den är tillgänglig från SQL 2012 och framåt. Du bör utforska detta för att vara bekant med detta. Om du har några kommentarer eller frågor, gärna lämna dem i kommentarerna nedan.,
- författare
- Senaste inlägg
han är skaparen av en av de största gratis online samlingar av artiklar om ett enda ämne, med sin 50-del serien på SQL Server alltid på tillgänglighet grupper. Baserat på hans bidrag till SQL Server-samhället har han blivit erkänd med olika utmärkelser, inklusive den prestigefyllda ”årets bästa författare” kontinuerligt i 2020 och 2021 på SQLShack.,
Raj är alltid intresserad av nya utmaningar så om du behöver konsulthjälp i något ämne som omfattas av hans skrifter, kan han nås på rajendra.gupta16@gmail.,com
Visa alla inlägg från Rajendra Gupta
- utföra mindre och större versionsuppgraderingar för AWS RDS SQL Server – Januari 29, 2021
- distribuera AWSQL RDS Postgres instances – Januari 27, 2021
- migrera dina lokala SQL-databaser till AWS RDS SQL Server med AWS DMS – 25 januari 2021