SQL Server 2012 a introdus un nou built-in funcția logică SQL IIF. Este o formă prescurtare de scriere logică declarație de caz sau dacă-altceva logica.
am explorat Declarația de caz în SQL în articolul meu anterior. Folosim o declarație de caz pentru a returna un rezultat pe baza condiției definite. Este similar cu un IF..Altfel … apoi declarație evaluează o expresie și returnează de ieșire. Declarația case este disponibilă în aproape toate versiunile SQL Server.
să explorăm această funcție SQL IIF în acest articol.,
SQL IIF Declarație de ansamblu
Vom folosi următorul format pentru a scrie declarația Caz logica în interogări SQL
SELECTAȚI CAZ Exprimare atunci Când expression1 Apoi Result1 Când expression2 Apoi Result2 … ALTFEL Rezultatul FINAL
putem scrie acest cod, folosind SQL IIF sintaxă declarație, după cum urmează.
IIF(boolean_expression, true_value, false_value)
- Boolean_expression: primul parametru în SQL IIF declarație este o expresie booleană., Ar trebui să fie valabil expresie booleană altfel vom ajunge o excepție
- True_Value: Dacă boolean_expression este ADEVĂRAT, returnează valoarea specificată în true_value parametrul
- False_Value: Dacă boolean_expression este FALSE, ea întoarce valoarea specificată în false_value parametrul
Să exploreze SQL IIF declarație folosind exemple.
Exemplu 1: SQL IIF declarație pentru a compara valori întregi
În următorul exemplu, se specifică expresie Booleană return False ( 2>3 nu este ADEVĂRAT)., 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.,
Exemplul 3: SQL IIF declarație pentru a compara doua siruri de caractere
În exemplul următor, vrem să comparăm șir de date folosind SQL IIF declarație. Vrem să știm persoana place bazat pe numele persoanei.,
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., În exemplul următor, persoana Vinay nu există în variabila @ persoană, deci returnează valoarea pentru o clauză falsă.
Exemplul 4: Imbricate SQL IIF declarație
putem folosi Imbricate SQL IIF declarație, precum și pentru a specifica mai multe condiții
În această SQL funcția IIF, se verifică pentru prima condiție și dacă condiția este ADEVĂRATĂ, se returnează valoarea. În cazul nostru, este fals ( persoana Vinay nu se potrivește cu Raj).verifică cealaltă condiție și returnează rezultatele dacă este adevărat.,
Dacă nici una din condiții este adevărată, se revine la default mesaj fals.
Exemplul 5: SQL IIF declarație cu o coloană de tabel
În exemplele anterioare, fie specificați valorile direct în IIF declarație sau specificate de variabilele pentru ea. De obicei, vrem să-l folosească cu datele existente într-un tabel SQL. Putem folosi declarația IIF și cu o coloană de tabel.,
în exemplul următor, dorim să cunoaștem numele Furnizorului din tabelul PurchaseOrders din Baza de date WideWorldImporters.
Dacă numele Furnizorului nu există pentru un anumit ID de furnizor, acesta returnează valoarea falsă specificată în instrucțiunea SQL IIF.
Exemplul 6: SQL IIF declarație cu o coloană de tabel și funcția agregată
Exemplul 7: SQL IIF declarație și tip de date prioritate
Am putea avea diferite tipuri de date pentru rezultate., Dacă avem diferite tipuri de date specificate în condițiile de rezultat, SQL Server oferă cel mai mare tip de date de prioritate. În exemplul următor, pentru condiția falsă(11>19), rezultatul va fi argumentul false_value, adică 100. Ar trebui să fie de tip de date întregi E, dar obținem ieșirea 40.0, deoarece celălalt argument float (2.6) are prioritate mare decât un număr întreg.,
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, nivelul 16, Starea 1, Linia 1 cel puțin una dintre expresiile rezultate dintr-o specificație de caz trebuie să fie o altă expresie decât constanta nulă.
în mesajul de eroare, puteți vedea că oferă informații despre specificația cazului, cu toate acestea am folosit funcția SQL IIF. Vom analiza acest lucru în exemplul următor.
ar trebui să specificați cel puțin unul dintre un argument adevărat sau fals.,
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., Da, este adevărat. Pe plan intern SQL Server convertește declarația în declarația de caz și execută. Îl putem verifica folosind planul de execuție real al unei interogări.
executați interogarea din exemplul 6 cu un plan de execuție real.
în planul de execuție real, uita-te la proprietățile calcul Scalar. Puteți vedea că execută declarația cazului intern.
concluzie
În acest articol, am explorat instrucțiunea SQL IIF care este un nou mod de a scrie condițiile legate de declarația cazului., Este disponibil începând cu SQL 2012. Ar trebui să explorați acest lucru pentru a vă familiariza cu acest lucru. Dacă aveți comentarii sau întrebări, nu ezitați să le lăsați în comentariile de mai jos.,
- Autor
- Mesajele Recente
el este creatorul uneia dintre cele mai mari colecții online gratuite de articole pe un singur subiect, cu seria sa de 50 de părți pe SQL Server întotdeauna pe grupuri de disponibilitate. Pe baza contribuției sale la comunitatea SQL Server, el a fost recunoscut cu diverse premii, inclusiv prestigiosul „cel mai bun autor al anului” continuu în 2020 și 2021 la sqlshack.,
Raj este întotdeauna interesat de noi provocări, așa că dacă aveți nevoie de ajutor de consultanță cu privire la orice subiect acoperit în scrierile sale, el poate fi contactat la rajendra.gupta16 @ gmail.,com
Vezi toate posturile de Rajendra Gupta
- Efectuarea minore și majore versiune upgrade-uri pentru AWS RDS SQL Server – ianuarie 29, 2021
- Implementarea AWS RDS PostgreSQL cazuri – 27 ianuarie 2021
- Migrarea la sediul baze de date SQL pentru AWS RDS SQL Server folosind AWS DMS – 25 ianuarie 2021