В 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