Поиск…


Вступление

Столбец имеет значение NULL, если он не имеет значения, независимо от типа данных этого столбца. Столбец никогда не должен сравниваться с NULL, используя этот синтаксис a = NULL как результат будет UNKNOWN. Вместо этого используйте условия a IS NULL или a IS NOT NULL . NULL не равен NULL. Чтобы сравнить два выражения, где может быть null, используйте одну из функций, описанных ниже. Все операторы, кроме конкатенации, возвращают NULL, если один из их операндов равен NULL. Например, результат 3 * NULL + 5 равен null.

замечания

NULL не может отображаться в столбцах, ограниченных ограничением PRIMARY KEY или NOT NULL. (Исключение - новое ограничение с предложением NOVALIDATE)

Столбцы любого типа данных могут содержать NULL

SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN VARCHAR2_COLUMN
1 Foo
(ноль) (ноль)

Пустые строки: NULL

SELECT 1 a, '' b from DUAL;
В
1 (ноль)

Операции, содержащие NULL, являются NULL, за исключением конкатенации

SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world'   from DUAL;
3 * NULL + 5 'ПРИВЕТ' || NULL || 'МИР'
(ноль) Привет, мир

NVL заменит нулевое значение

SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
  (SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL COLUMN_WITHOUT_NULL
(ноль) N / A

NVL полезно сравнить два значения, которые могут содержать NULL:

SELECT
    CASE WHEN a = b THEN 1 WHEN a <> b THEN 0 else -1 END comparison_without_nvl,
    CASE WHEN NVL(a, -1) = NVL(b, -1) THEN 1 WHEN NVL(a, -1) <> NVL(b, -1) THEN 0 else -1 END comparison_with_nvl
  FROM
    (select null a, 3 b FROM DUAL
     UNION ALL
     SELECT NULL, NULL FROM DUAL);
COMPARISON_WITHOUT_NVL COMPARISON_WITH_NVL
-1 0
-1 1

NVL2 получить другой результат, если значение равно null или нет

Если первый параметр NOT NULL, NVL2 вернет второй параметр. В противном случае он вернет третий.

SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, 'Foo', 'BAR') NVL2 (5, 'Foo', 'BAR')
Бар Foo

COALESCE, чтобы вернуть первое значение, отличное от NULL

SELECT COALESCE(a, b, c, d, 5) FROM 
    (SELECT NULL A, NULL b, NULL c, 4 d FROM DUAL);
СОАЬЕЗСЕ (А, В, С, D, 5)
4

В некоторых случаях использование COALESCE с двумя параметрами может быть быстрее, чем использование NVL, когда второй параметр не является константой. NVL всегда будет оценивать оба параметра. COALESCE остановится при первом не-NULL-значении, с которым он сталкивается. Это означает, что если первое значение не является NULL, COALESCE будет быстрее.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow