Sök…


Introduktion

En kolumn är NULL när den inte har något värde, oavsett datatyp för den kolumnen. En kolumn ska aldrig jämföras med NULL med användning av denna syntax a = NULL eftersom resultatet skulle bli Okänt. Använd istället a IS NULL eller a IS NOT NULL villkor. NULL är inte lika med NULL. För att jämföra två uttryck där noll kan hända, använd en av funktionerna som beskrivs nedan. Alla operatörer utom sammankoppling returnerar NULL om en av deras operander är NULL. Till exempel är resultatet av 3 * NULL + 5 noll.

Anmärkningar

NULL kan inte visas i kolumner begränsade av en PRIMÄRKNYGL eller en INTE NULL-begränsning. (Undantag är en ny begränsning med NOVALIDATE-klausulen)

Kolumner av vilken datatyp som helst kan innehålla NULL: er

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

Tomma strängar är NULL

SELECT 1 a, '' b from DUAL;
EN B
1 (null)

Operationer som innehåller NULL är NULL, förutom sammanlänkning

SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world'   from DUAL;
3 * NULL + 5 'HEJ' || NOLL || 'värld'
(null) Hej världen

NVL för att ersätta nullvärdet

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 är användbart för att jämföra två värden som kan innehålla 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 för att få ett annat resultat om ett värde är noll eller inte

Om den första parametern INTE är NULL kommer NVL2 att returnera den andra parametern. Annars kommer den att returnera den tredje.

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

COALESCE för att returnera det första värdet som inte är NULL

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

I vissa fall kan COALESCE med två parametrar vara snabbare än att använda NVL när den andra parametern inte är en konstant. NVL kommer alltid att utvärdera båda parametrarna. COALESCE kommer att stanna vid det första värdet utan NULL som det möter. Det betyder att om det första värdet är icke-NULL, kommer COALESCE att vara snabbare.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow