W SQL Server, IIF()
funkcja (nie mylić z IF
instrukcja) to funkcja warunkowa, która zwraca drugi lub trzeci argument na podstawie oceny pierwszego argumentu.
To skrócony sposób na napisanie CASE
wyrażenie. Jest logicznie odpowiednikiem CASE WHEN X THEN Y ELSE Z END
zakładając IIF(X, Y, Z)
.
IIF()
to skrót od Natychmiastowe JEŻELI .
Składnia
Składnia wygląda tak:
IIF ( boolean_expression, true_value, false_value )
Gdzie:
- wyrażenie_logiczne jest wyrażeniem do oceny.
- prawdziwa_wartość jest zwracane, jeśli wyrażenie_logiczne to prawda.
- false_value jest zwracane, jeśli wyrażenie_logiczne jest fałszywe lub nieznane.
Tak jak w przypadku CASE
wyrażenia, IIF()
oświadczenia mogą być zagnieżdżane tylko do maksymalnego poziomu 10.
Przykład
Oto podstawowy przykład pokazujący, jak IIF()
działa.
SELECT IIF( 1 < 2, 'True', 'False' );
Wynik:
True
W tym przypadku wyrażenie do oceny to 1 < 2
. Prawdą jest, że 1 jest mniejsze niż 2, więc został zwrócony drugi argument.
Jest to równoważne z wykonaniem następujących czynności.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Wynik:
True
W tych przykładach użyłem słów „Prawda” i „Fałsz”, ale mogłem użyć wszystkiego.
Na przykład mógłbym zrobić to zamiast tego:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Wynik:
Fail
Lub może to być coś całkowicie usuniętego z „prawdziwej” lub „fałszywej” odpowiedzi typu binarnego.
Na przykład:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Wynik:
Deadlift
Testowanie zmiennej
W praktyce zwykle testujesz zmienne, kolumny itp., a nie stałe, jak w poprzednich przykładach.
Oto przykład, który testuje zmienną.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Wynik:
Rich!
Przykład bazy danych
Oto przykład, który wykorzystuje kolumny z bazy danych.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Wynik:
+----------------+--------------+-------------+ | 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 | +----------------+--------------+-------------+
Zagnieżdżone funkcje IIF()
Oto przykład zagnieżdżenia IIF()
funkcjonować. Przez „zagnieżdżanie” rozumiem, że przekazuję kolejną IIF()
funkcja jako argument do zewnętrznej IIF()
funkcja.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Wynik:
Wealthy
Możesz zagnieździć IIF()
działa do poziomu 10.