В MariaDB, IFNULL() функцията ни позволява да заменим NULL стойности с друга стойност.
Синтаксис
IFNULL(expr1,expr2)
Ако expr1 не е NULL , IFNULL() връща expr1 ; в противен случай връща expr2 .
Също така, от MariaDB 10.3, NVL() може да се използва като псевдоним за IFNULL() функция. Следователно имаме опцията вместо това да използваме следния синтаксис:
NVL(expr1,expr2) Резултатът е един и същ, независимо кой синтаксис се използва.
Пример
Ето основен пример, който използва NULL константа:
SELECT IFNULL( null, 'No Value' ); Резултат:
No Value
В този случай използвах IFNULL() за да замените стойността NULL с No Value .
Ето какво се случва, когато първият аргумент не е NULL :
SELECT IFNULL( 'Spicy', 'No Value' ); Резултат:
Spicy
В този случай се връща първият аргумент, защото не е NULL .
Пример за база данни
Да предположим, че изпълняваме следната заявка:
SELECT * FROM Employees; Резултат:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Можем да видим, че два реда имат стойности NULL в dept колона.
В следната заявка използваме IFNULL() за да замените стойностите NULL с по-смислена стойност за четеца:
SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees; Резултат:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Изрази
Изчислява се текущата стойност на първия аргумент. Следователно, ако предоставим израз като следния:
SELECT IFNULL( 3 * 7, 0 ); Получаваме това:
21
Така че не получаваме 3 * 7 част. Получаваме резултата от този израз (който в този случай е 21 ).
Същото е вярно, когато резултатът от израза е NULL . Например, ако изпълним следния код:
SELECT IFNULL( 3 / 0, 0 ); Получаваме това:
0.0000
Това обаче е опасен пример. Нулата е стойност. NULL не е.
Връщането на нула, когато има стойност NULL, може да бъде подвеждащо или дори напълно погрешно. Представете си, ако се занимаваме с цени. Можем да получим цена от нула, което може да е неправилно и да струва на бизнеса много пари.
Затова в такива случаи обикновено е по-добре да се използва по-смислена стойност, която да предаде на читателя, че няма стойност.
Пример:
SELECT IFNULL( 3 / 0, 'No value' ); Резултат:
No Value
NVL() Функция
Започвайки с MariaDB 10.3, NVL() е псевдоним за IFNULL() . Следователно можем да заменим IFNULL() с NVL() в някой от горните примери.
Пример:
SELECT NVL( 3 / 0, 'No value' ); Резултат:
No Value