Повечето основни СУБД ни предоставят функция за замяна на нулеви стойности с друга стойност.
Но името на функцията има тенденция да се различава в различните СУБД. Например SQL Server има ISNULL()
функция, докато други (като MySQL, MariaDB и SQLite) имат IFNULL()
функция за извършване на същото нещо.
Въпреки това, за да се объркат нещата, MySQL и MariaDB имат ISNULL()
функция, която работи различно от функцията на SQL Server със същото име (внедряването на MySQL и MariaDB приема само един аргумент и връща 1
ако е null
и 0
ако не е).
Както и да е, в случая с Oracle Database, можем да използваме NVL()
функция за замяна на нулеви стойности с друга стойност.
Всъщност Oracle Database също има NVL2()
функция, която ни позволява да предоставим друга стойност, която да използваме в случай, че първият аргумент не е null
.
Ако просто искаме да проверим дали дадена стойност е null
или не, можем да използваме IS NULL
условие (или IS NOT NULL
за обратния тест).
NVL()
Функция
Ето пример, който демонстрира как NVL()
функция работи:
SELECT NVL(null, 'Run')
FROM DUAL;
Резултат:
Run
В този случай първият аргумент беше null
и така вторият аргумент беше върнат.
Ето какво се случва, когато първият аргумент не е null
:
SELECT NVL('Walk', 'Run')
FROM DUAL;
Резултат:
Walk
Първият аргумент се връща.
NVL2()
Функция
Както споменахме, Oracle Database ни предоставя и NVL2()
функция. Тази функция ни позволява да предоставим друга стойност, която да използваме в случай, че първият аргумент не е null
.
Ето пример за това как работи:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Резултат:
3
Първият аргумент беше null
и така беше върнат третият аргумент.
Ето какво се случва, когато първият аргумент не е null
:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Резултат:
2
Вторият аргумент се връща.
IS NULL
и IS NOT NULL
Условия
Ако просто искаме да разберем дали дадена стойност е null
, можем да използваме IS NULL
условие за сравнение. Като алтернатива можем да използваме IS NOT NULL
за да проверите дали не е null
.
Да предположим, че имаме следната таблица:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Резултат:
ID | OE# | PRICE | МОДЕЛ |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
В този случай PRICE
колоната съдържа нулева стойност за първия ред, но не и за втория ред.
Ето пример за използване на IS NULL
срещу тази таблица:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Резултат:
ID | OE# | PRICE | МОДЕЛ |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Връща се само реда с нулева цена.
Ето какво се случва, когато използваме IS NOT NULL
:
SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Резултат:
ID | OE# | PRICE | МОДЕЛ |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
Другият ред се връща.