Przejdź do treści
FullstackDev

Funkcje warunkowe

Poznaliśmy już instrukcje CASE, która była w stanie zwrócić różne wartości w zależności od spełnienia warunków. W SQL mamy jeszcze kilka przydatnych funkcji, które mogą być prostszą alternatywą dla CASE.

ISNULL

Funkcja ISNULL zwraca wartość podaną jako pierwszy argument, jeśli nie jest ona NULL, w przeciwnym wypadku zwraca wartość podaną jako drugi argument.

SELECT ISNULL(NULL, 1) AS result;

Przykładowo, aby zwrócić informacje 'n/a', dla klientów, którzy nie mają wpisanego drugiego imienia:

SELECT ISNULL(MiddleName, 'n/a') as MiddleName
FROM SalesLT.Customer

COALESCE

Funkcja COALESCE zwraca pierwszy niepusty argument. Jeśli wszystkie argumenty są puste, zwraca NULL.

SELECT COALESCE(Title, MiddleName, 'n/a') as [COALESCE]
FROM SalesLT.Customer

NULLIF

Funkcja NULLIF zwraca wartość NULL, jeśli dwa argumenty są równe, w przeciwnym razie zwraca pierwszy argument.

SELECT NULLIF(1, 1) AS result; -- NULL
SELECT NULLIF(1, 2) AS result; -- 1

IIF

Funkcja IIF to skrót od Immediate If. Jest to funkcja, która zwraca wartość w zależności od spełnienia warunku.

IIF (warunek, wartość_jeśli_prawda, wartość_jeśli_fałsz)

Przykład

SELECT IIF(1 > 0, 'Prawda', 'Fałsz') AS Wynik;

Funkcja ta może posłużyć nam jako zamiennik dla konstrukcji CASE WHEN.

SELECT 
    SalesOrderID,
    TotalDue,
    CASE 
        WHEN TotalDue > 10000 THEN 'Big order'
        ELSE 'Small order'
    END AS OrderSize
FROM SalesLT.SalesOrderHeader
SELECT 
    SalesOrderID,
    TotalDue,
    IIF(TotalDue > 10000, 'Big order', 'Small order') AS OrderSize
FROM SalesLT.SalesOrderHeader;