Suche…


Einführung

Eine Spalte ist NULL, wenn sie keinen Wert hat, unabhängig vom Datentyp dieser Spalte. Eine Spalte sollte niemals mit NULL verglichen werden, wenn diese Syntax a = NULL da das Ergebnis UNKNOWN wäre. Verwenden Sie stattdessen a IS NULL oder a IS NOT NULL Bedingung. NULL ist nicht gleich NULL. Verwenden Sie zum Vergleichen zweier Ausdrücke, bei denen Null auftreten kann, eine der unten beschriebenen Funktionen. Alle Operatoren mit Ausnahme der Verkettung geben NULL zurück, wenn einer ihrer Operanden NULL ist. Zum Beispiel ist das Ergebnis von 3 * NULL + 5 null.

Bemerkungen

NULL darf nicht in Spalten angezeigt werden, die durch einen PRIMARY KEY oder eine NOT NULL-Einschränkung eingeschränkt sind. (Ausnahme ist eine neue Einschränkung mit NOVALIDATE-Klausel.)

Spalten eines beliebigen Datentyps können NULL-Werte enthalten

SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN VARCHAR2_COLUMN
1 foo
(Null) (Null)

Leere Zeichenfolgen sind NULL

SELECT 1 a, '' b from DUAL;
EIN B
1 (Null)

Operationen, die NULL enthalten, sind NULL mit Ausnahme der Verkettung

SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world'   from DUAL;
3 * NULL + 5 'HALLO' || NULL || 'WELT'
(Null) Hallo Welt

NVL zum Ersetzen des Nullwerts

SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
  (SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL COLUMN_WITHOUT_NULL
(Null) N / A

NVL ist nützlich, um zwei Werte zu vergleichen, die NULL enthalten können:

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, um ein anderes Ergebnis zu erhalten, wenn ein Wert null ist oder nicht

Wenn der erste Parameter NOT NULL ist, gibt NVL2 den zweiten Parameter zurück. Andernfalls wird der dritte zurückgegeben.

SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2 (NULL, 'FOO', 'BAR') NVL2 (5, 'FOO', 'BAR')
Bar Foo

COALESCE, um den ersten Nicht-NULL-Wert zurückzugeben

SELECT COALESCE(a, b, c, d, 5) FROM 
    (SELECT NULL A, NULL b, NULL c, 4 d FROM DUAL);
COALESCE (A, B, C, D, 5)
4

In einigen Fällen kann die Verwendung von COALESCE mit zwei Parametern schneller sein als die Verwendung von NVL, wenn der zweite Parameter keine Konstante ist. NVL wertet immer beide Parameter aus. COALESCE stoppt beim ersten Nicht-NULL-Wert, auf den es trifft. Wenn der erste Wert nicht NULL ist, ist COALESCE schneller.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow