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