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