Повечето основни СУБД ни предоставят функция за замяна на нулеви стойности с друга стойност.
Но името на функцията има тенденция да се различава в различните СУБД. Например 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 |
Другият ред се връща.