От 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