MySQL има IFNULL()
функция, която ни позволява лесно да заменим NULL стойности с друга стойност.
Синтаксис
IFNULL(expr1,expr2)
Ако expr1
не е NULL
, IFNULL()
връща expr1
; в противен случай връща expr2
.
Пример
Ето основен пример, който използва NULL
константа:
SELECT IFNULL( null, 'n/a' );
Резултат:
n/a
В този случай използвах IFNULL()
за да замените стойността NULL с низа n/a
.
Ето какво се случва, когато първият аргумент не е NULL
:
SELECT IFNULL( 'Cow', 'n/a' );
Резултат:
Cow
В този случай се връща първият аргумент, защото не е NULL
.
Пример за база данни
Да предположим, че изпълняваме следната заявка:
SELECT
PetName,
DOB
FROM Pets;
Резултат:
+---------+------------+ | 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 | +---------+------------+
Можем да видим, че два реда имат стойности NULL в колоната DOB.
В следната заявка използваме IFNULL()
за да замените стойностите NULL с по-смислена стойност за четеца:
SELECT
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets;
Резултат:
+---------+--------------------------------+ | 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 | +---------+--------------------------------+
Изрази
Изчислява се текущата стойност на първия аргумент. Следователно, ако предоставим израз като следния:
SELECT IFNULL( 2 * 5, 0 );
Получаваме това:
10
Така че не получаваме 2 * 5
част. Получаваме резултата от този израз (който в този случай е 10
).
Същото е вярно, когато резултатът от израза е NULL
:
SELECT IFNULL( 2 / 0, 0 );
Получаваме това:
0.0000
Все пак си струва да се внимава. Нулата е стойност. NULL
не е.
В горния пример върнах нула, когато имаше стойност NULL, но това може да бъде подвеждащо или дори напълно погрешно. Представете си, ако делим цените и резултатът е нула. Добре, ако разделим цената на нула, вероятно нещо друго не е наред, но съм сигурен, че разбирате мнението ми.
Във всеки случай обикновено е по-добре да използвате по-смислена стойност, която да предаде на читателя, че няма стойност.
Пример:
SELECT IFNULL( 2 / 0, 'No value' );
Резултат:
No value