Oracle Database
Umgang mit NULL-Werten
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