MySQL ma funkcję IFNULL() funkcja, która pozwala nam łatwo zastąpić wartości NULL inną wartością.
Składnia
IFNULL(expr1,expr2)
Jeśli expr1 nie jest NULL , IFNULL() zwraca expr1 ; w przeciwnym razie zwraca expr2 .
Przykład
Oto podstawowy przykład, który używa NULL stała:
SELECT IFNULL( null, 'n/a' ); Wynik:
n/a
W tym przypadku użyłem IFNULL() zastąpić wartość NULL ciągiem n/a .
Oto, co się dzieje, gdy pierwszym argumentem nie jest NULL :
SELECT IFNULL( 'Cow', 'n/a' ); Wynik:
Cow
W tym przypadku zwracany jest pierwszy argument, ponieważ nie jest on NULL .
Przykład bazy danych
Załóżmy, że uruchamiamy następujące zapytanie:
SELECT
PetName,
DOB
FROM Pets; Wynik:
+---------+------------+ | PetName | DOB | +---------+------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+------------+
Widzimy, że dwa wiersze mają wartości NULL w kolumnie DOB.
W poniższym zapytaniu używamy IFNULL() aby zastąpić wartości NULL bardziej znaczącą wartością dla czytelnika:
SELECT
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets; Wynik:
+---------+--------------------------------+ | PetName | IFNULL( DOB, 'None supplied' ) | +---------+--------------------------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None supplied | | Meow | None supplied | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+--------------------------------+
Wyrażenia
Oceniana jest bieżąca wartość pierwszego argumentu. Dlatego jeśli dostarczymy wyrażenie podobne do następującego:
SELECT IFNULL( 2 * 5, 0 ); Otrzymujemy to:
10
Tak więc nie otrzymujemy 2 * 5 część. Otrzymujemy wynik tego wyrażenia (którym w tym przypadku jest 10 ).
To samo dotyczy sytuacji, gdy wynikiem wyrażenia jest NULL :
SELECT IFNULL( 2 / 0, 0 ); Otrzymujemy to:
0.0000
Warto jednak zachować ostrożność. Zero to wartość. NULL nie jest.
W powyższym przykładzie zwróciłem zero, gdy była wartość NULL, ale może to być mylące lub nawet całkowicie błędne. Wyobraź sobie, że dzielimy ceny i otrzymujemy cenę zerową. OK, jeśli dzielimy cenę przez zero, prawdopodobnie jest coś nie tak, ale jestem pewien, że rozumiesz.
W każdym razie zwykle lepiej jest użyć bardziej znaczącej wartości, która informuje czytelnika, że nie ma żadnej wartości.
Przykład:
SELECT IFNULL( 2 / 0, 'No value' ); Wynik:
No value