Obsługa list NUL
Wartość NULL nie oznacza żadnej wartości ani nieznanej. Nie oznacza to zera ani pustego, a nawet pustego ciągu. Te wartości nie są nieznane. Wartość NULL można użyć dla wartości, które nie zostały jeszcze podane, na przykład wtedy, gdy klient nie podał jeszcze adresu e-mail. Jak pokazano wcześniej, wartość NULL może być również zwracana przez niektóre funkcje konwersji, jeśli wartość nie jest zgodna z docelowym typem danych.
Często trzeba wykonać specjalne kroki, aby poradzić sobie z wartością NULL. Wartość NULL jest naprawdę wartością inną niż wartość. Jest nieznany. To nie jest równe nic, i nie jest nierówne do niczego. Wartość NULL nie jest większa ani mniejsza niż cokolwiek innego. Nie możemy powiedzieć nic o tym, co to jest, ale czasami musimy pracować z wartościami NULL. Na szczęście język T-SQL udostępnia funkcje konwersji lub zastąpienia wartości NULL.
ISNULL
Funkcja ISNULL przyjmuje dwa argumenty. Pierwszy to wyrażenie, które testujemy. Jeśli wartość tego pierwszego argumentu ma wartość NULL, funkcja zwraca drugi argument. Jeśli pierwsze wyrażenie nie ma wartości null, zostanie zwrócone bez zmian.
Załóżmy na przykład, że tabela Sales.Customer w bazie danych zawiera kolumnę MiddleName , która zezwala na wartości NULL. Podczas wykonywania zapytań dotyczących tej tabeli, a nie zwracania wartości NULL w wyniku, możesz zwrócić określoną wartość, taką jak "Brak".
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
Wyniki tego zapytania mogą wyglądać mniej więcej tak:
FirstName
MiddleIfAny
LastName
Orlando
N.
Gee
Keith
Brak
Howard
Donna
F.
Gonzales
...
...
...
Uwaga
Wartość zastępowana wartością NULL musi być tym samym typem danych co obliczane wyrażenie. W powyższym przykładzie MiddleName jest wartością varchar, więc wartość zastępcza nie może być liczbowa. Ponadto należy wybrać wartość, która nie będzie wyświetlana w danych jako wartość zwykła. Czasami trudno jest znaleźć wartość, która nigdy nie będzie wyświetlana w danych.
Poprzedni przykład obsłużył wartość NULL w tabeli źródłowej, ale można użyć funkcji ISNULL z dowolnym wyrażeniem, które może zwrócić wartość NULL, w tym zagnieżdżanie funkcji TRY_CONVERT w funkcji ISNULL.
COALESCE
Funkcja ISULL nie jest standardem ANSI, więc możesz zamiast tego użyć funkcji COALESCE. FUNKCJA COALESCE jest nieco bardziej elastyczna, ponieważ może przyjmować zmienną liczbę argumentów, z których każde jest wyrażeniem. Zwróci pierwsze wyrażenie na liście, które nie ma wartości NULL.
Jeśli istnieją tylko dwa argumenty, COALESCE zachowuje się jak ISNULL. Jednak z więcej niż dwoma argumentami funkcja COALESCE może służyć jako alternatywa dla wieloczęściowego wyrażenia CASE przy użyciu funkcji ISNULL.
Jeśli wszystkie argumenty mają wartość NULL, funkcja COALESCE zwraca wartość NULL. Wszystkie wyrażenia muszą zwracać te same lub zgodne typy danych.
Składnia wygląda następująco:
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
W poniższym przykładzie użyto fikcyjnej tabeli o nazwie HR. Płace, które zawierają trzy kolumny zawierające informacje o cotygodniowych zarobkach pracowników: stawka godzinowa, tygodniowa pensja i prowizja za sprzedaną jednostkę. Jednak pracownik otrzymuje tylko jeden rodzaj wynagrodzenia. Dla każdego pracownika jedna z tych trzech kolumn będzie miała wartość, a pozostałe dwa będą miały wartość NULL. Aby określić łączną kwotę zapłaconą każdemu pracownikowi, możesz użyć funkcji COALESCE, aby zwrócić tylko wartość inną niż null znalezioną w tych trzech kolumnach.
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
Wyniki mogą wyglądać mniej więcej tak:
EmployeeID (Identyfikator pracownika)
WeeklyEarnings
1
899.76
2
1001.00
3
1298.77
...
...
NULLIF
Funkcja NULLIF umożliwia zwrócenie wartości NULL w określonych warunkach. Ta funkcja ma przydatne aplikacje w obszarach, takich jak czyszczenie danych, gdy chcesz zastąpić puste lub symbole zastępcze wartością NULL.
Funkcja NULLIF przyjmuje dwa argumenty i zwraca wartość NULL, jeśli są równoważne. Jeśli nie są równe, funkcja NULLIF zwraca pierwszy argument.
W tym przykładzie wartość NULLIF zastępuje rabat 0 wartością NULL. Zwraca wartość rabatu, jeśli nie jest równa 0:
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
Wyniki mogą wyglądać mniej więcej tak:
SalesOrderID
ProductID
UnitPrice
Discount
71774
836
356.898
NULL
71780
988
112.998
0,4
71781
748
818.7
NULL
71781
985
112.998
0,4
...
...
...
...