SQL Server 2012 představil nový vestavěný logické funkce SQL IIF. Jedná se o zkrácenou formu psaní logiky prohlášení o případu nebo logiky if-ELSE.
V mém dřívějším článku jsme prozkoumali příkaz Case v SQL. Používáme případové prohlášení k vrácení výsledku na základě definované podmínky. Je to podobné jako IF..Jinak … pak příkaz vyhodnotí výraz a vrátí výstup. Příkaz case je k dispozici téměř ve všech verzích SQL Serveru.
pojďme prozkoumat tuto funkci SQL IIF v tomto článku.,
SQL IIF přehled
, použijte následující formát napsat Případě prohlášení logika v SQL dotazů
SELECT CASE Výraz, Když výraz1 a Pak Result1, Když výraz2 Pak Result2 … JINÝ Výsledek
můžeme napsat tento kód pomocí SQL IIF syntaxe příkazu jako následující.
IIF(boolean_expression, true_value, false_value)
- Boolean_expression: první parametr v SQL IIF je logický výraz., To by mělo být platný logický výraz ještě dostaneme výjimku
- True_Value: Pokud boolean_expression je PRAVDA, vrátí hodnotu zadanou v true_value parametr
- False_Value: Pokud boolean_expression je FALSE, vrátí hodnotu zadanou v false_value parametr
Pojďme prozkoumat SQL IIF pomocí příkladů.
Příklad 1: SQL IIF pro srovnání celočíselné hodnoty
V následujícím příkladu zadaný Logický výraz vrátí hodnotu False ( 2>3 není PRAVDA)., 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.,
Příklad 3: SQL IIF porovnat dva řetězce
V následujícím příkladu chceme porovnat řetězec data pomocí SQL IIF. Chceme znát osobu, která má ráda, na základě jména osoby.,
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., V následujícím příkladu osoba Vinay neexistuje v proměnné @Person, takže vrací hodnotu za falešnou klauzuli.
4. Příklad: Vnořené SQL IIF
můžeme použít Vnořené SQL IIF stejně zadat více podmínek,
V tomto SQL funkce IIF, zkontroluje první podmínka a je-li podmínka splněna, vrátí hodnotu. V našem případě je to nepravdivé (osoba Vinay neodpovídá Raj).kontroluje druhou podmínku a vrací výsledky, pokud je to pravda.,
Pokud žádná z podmínek, je pravda, vrátí výchozí falešnou zprávu.
Příklad 5: SQL IIF s sloupce tabulky
V předchozích příkladech jsme buď zadat hodnoty přímo v IIF nebo zadané proměnné. Obvykle ji chceme použít s existujícími daty v tabulce SQL. Můžeme také použít prohlášení IIF se sloupcem tabulky.,
v následujícím příkladu chceme znát název dodavatele z tabulky PurchaseOrders v databázi WideWorldImporters.
Pokud název dodavatele neexistuje pro konkrétní ID dodavatele, vrátí zadanou falešnou hodnotu v příkazu SQL IIF.
Příklad 6: SQL IIF s sloupce tabulky a agregační funkce
Příklad 7: SQL IIF a typ dat přednost
možná Máme různé typy dat pro výsledky., Pokud máme různé datové typy uvedené ve výsledkových podmínkách, SQL Server dává nejvyšší přednost datovému typu. V následujícím příkladu pro falešný stav (11>19) bude výsledkem argument false_value, tj. 100. Mělo by to být datového typu E integer, ale dostaneme výstup 40.0, protože druhý argument float (2.6) má vysokou prioritu než celé číslo.,
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, úroveň 16, Stav 1, řádek 1 alespoň jeden z výrazů výsledku ve specifikaci případu musí být jiný výraz než nulová konstanta.
v chybové zprávě můžete vidět, že poskytuje informace o specifikaci případu, ale použili jsme funkci SQL IIF. Podíváme se na to v dalším příkladu.
měli byste zadat alespoň jeden z pravdivých nebo falešných 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., Ano, Je to pravda. Interně SQL Server převádí příkaz do příkazu CASE a provádí. Můžeme to zkontrolovat pomocí skutečného plánu provedení dotazu.
proveďte dotaz z příkladu 6 se skutečným plánem provádění.
ve skutečném plánu provádění se podívejte na vlastnosti výpočetního skaláru. Můžete vidět, že provádí prohlášení o případu interně.
Závěr
V tomto článku jsme se zabývali SQL IIF, že je nový způsob psaní PŘÍPADĚ prohlášení související podmínky., Je k dispozici od SQL 2012 dále. Měli byste to prozkoumat, abyste se s tím seznámili. Pokud máte nějaké připomínky nebo dotazy, neváhejte je nechat v komentářích níže.,
- Autora
- Poslední Příspěvky
je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma, s jeho 50dílnou sérií na serveru SQL vždy na skupinách dostupnosti. Na základě svého příspěvku do komunity SQL Server byl v letech 2020 a 2021 na sqlshacku nepřetržitě oceněn různými oceněními včetně prestižního „nejlepšího autora roku“.,
Raj je vždy zájem o nové výzvy, takže pokud budete potřebovat poradenství na jakékoliv téma, na něž v jeho spisech, on může být dosaženo na rajendra.gupta16@gmail.,com
Zobrazit všechny příspěvky od Rajendra Gupta
- Vykonávající vedlejší a hlavní verze aktualizace pro AWS RDS SQL Server – 29. ledna, 2021
- Nasazení AWS RDS instance PostgreSQL – 27. ledna 2021
- Migrace v prostorách SQL databází AWS RDS serveru SQL Server pomocí AWS DMS – 25. ledna 2021