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