SQL Server 2012 introduceerde een nieuwe ingebouwde logische functie SQL IIF. Het is een steno vorm van het schrijven van CASE statement logica of IF-ELSE logica.
We hebben Case Statement in SQL onderzocht in mijn eerdere artikel. We gebruiken een case statement om een resultaat te retourneren op basis van de gedefinieerde voorwaarde. Het is vergelijkbaar met een IF..ELSE … dan evalueert statement een expressie en geeft de uitvoer terug. De case statement is beschikbaar in bijna alle versies van SQL Server.
laten we deze sql IIF-functie in dit artikel verkennen.,
SQL IIF Statement overview
we gebruiken het volgende formaat om hoofdletter statement logica te schrijven in SQL queries
Select CASE expression1 Then Result1 When expression2 Then Result2 … ELSE Result END
We kunnen deze code schrijven met behulp van SQL IIF statement syntaxis als volgt.
IIF(boolean_expression, true_value, false_value)
- Boolean_expression: de eerste parameter in SQL IIF statement is een Booleaanse expressie., Het zou een geldige Booleaanse uitdrukking moeten zijn anders krijgen we een uitzondering
- True_Value: als de boolean_expression waar is, geeft het waarde terug die is opgegeven in de true_value parameter
- False_Value: als de boolean_expression onwaar is, geeft het waarde terug die is opgegeven in de false_value parameter
laten we SQL IIF statement verkennen met behulp van voorbeelden.
Voorbeeld 1: SQL IIF-statement voor het vergelijken van gehele waarden
In het volgende voorbeeld geeft de opgegeven Booleaanse uitdrukking onwaar terug (2>3 is niet waar)., 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.,
Voorbeeld 3: SQL IIF statement om twee strings
te vergelijken in het volgende voorbeeld willen we de stringgegevens vergelijken met behulp van SQL IIF statement. We willen weten wat de persoon leuk vindt op basis van de naam van de persoon.,
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., In het volgende voorbeeld, persoon Vinay bestaat niet in de variabele @persoon, dus het retourneert waarde voor een false clausule.
Voorbeeld 4: geneste SQL IIF statement
We kunnen ook geneste SQL IIF statement gebruiken om meerdere voorwaarden
in deze sql IIF functie te specificeren, het controleert op de eerste voorwaarde en als de voorwaarde Waar is, retourneert het de waarde. In ons geval is het FALSE ( persoon Vinay komt niet overeen met Raj).het controleert op de andere voorwaarde en geeft resultaten als het waar is.,
als geen van de voorwaarden waar is, geeft het het standaard false bericht terug.
Voorbeeld 5: SQL IIF statement met een tabelkolom
In de vorige voorbeelden geven we ofwel waarden direct op in het IIF statement of opgegeven variabelen ervoor. Meestal willen we het gebruiken met de bestaande data in een SQL tabel. We kunnen het IIF statement ook gebruiken met een tabelkolom.,
in het volgende voorbeeld willen we de naam van de leverancier weten uit de tabel inkooporders in de database van WideWorldImporters.
als de leverancier naam niet bestaat voor een bepaalde leverancier id, geeft het de opgegeven false waarde terug in SQL IIF statement.
Voorbeeld 6: SQL IIF statement with a table column and aggregate function
Voorbeeld 7: SQL IIF statement and data type priority
We kunnen verschillende gegevenstypen hebben voor de resultaten., Als we verschillende gegevenstypen hebben opgegeven in de resultaatvoorwaarden, geeft SQL Server het gegevenstype met de hoogste prioriteit. In het volgende voorbeeld, voor de false voorwaarde(11>19), zal het resultaat het false_value argument zijn, d.w.z. 100. Het zou Van e integer data type moeten zijn, maar we krijgen de output 40.0 omdat het andere argument float (2.6) een hoge prioriteit heeft dan een integer.,
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, niveau 16, toestand 1, Regel 1 ten minste één van de resultaatuitdrukkingen in een CASE-specificatie moet een andere uitdrukking zijn dan de NULCONSTANTE.
In de foutmelding kunt u zien dat het informatie geeft over de CASE-specificatie, maar we gebruikten de SQL IIF-functie. We zullen dit in het volgende voorbeeld bekijken.
u moet ten minste één van een true of false argument opgeven.,
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, het is waar. Intern converteert SQL Server het statement naar het CASE statement en voert het uit. We kunnen het controleren met behulp van het feitelijke uitvoeringsplan van een query.
Voer de query uit uit Voorbeeld 6 met een daadwerkelijk uitvoeringsplan.
in het feitelijke uitvoeringsplan, kijk naar de eigenschappen van de Scalar berekenen. Je kunt zien dat het de CASE statement intern uitvoert.
conclusie
in dit artikel hebben we het sql IIF Statement onderzocht dat een nieuwe manier is om aan CASE statement gerelateerde voorwaarden te schrijven., Het is beschikbaar vanaf SQL 2012 en later. Je zou dit moeten onderzoeken om hier bekend mee te zijn. Als u opmerkingen of vragen, voel je vrij om ze te verlaten in de reacties hieronder.,
- Auteur
- Laatste Berichten
hij is de maker van een van de grootste gratis online collecties van artikelen over een enkel onderwerp, met zijn 50-delige serie op SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server community, werd hij in 2020 en 2021 bij SQLShack onderscheiden met verschillende prijzen, waaronder de prestigieuze “beste auteur van het jaar”.,Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt over een onderwerp dat in zijn geschriften wordt behandeld, kan hij worden bereikt in rajendra.gupta16@gmail.,com
Bekijk alle berichten van Rajendra Gupta
- Uitvoeren van kleine en grote versie-upgrades voor AWS RDS-SQL Server – januari 29, 2021
- het Implementeren van AWS RDS-PostgreSQL gevallen, 27 januari 2021
- het Migreren van uw lokale SQL-databases naar AWS RDS SQL Server met behulp van AWS DMS – januari 25, 2021