Kategorien:

Funktionen für bedingte Ausdrücke

IFNULL

Wenn expr1 den Wert NULL hat, wird expr2 zurückgegeben, ansonsten wird expr1 zurückgegeben.

Aliasse:

NVL

Syntax

IFNULL( <expr1> , <expr2> )
Copy

Argumente

expr1

Ein allgemeiner Ausdruck.

expr2

Ein allgemeiner Ausdruck.

Nutzungshinweise

  • Snowflake führt eine implizite Konvertierung von Argumenten aus, damit diese kompatibel sind. Wenn beispielsweise einer der Eingabeausdrücke ein numerischer Typ ist, ist der Rückgabetyp ebenfalls ein numerischer Typ. Das heißt, SELECT IFNULL('17', 1); konvertiert zuerst den VARCHAR-Wert '17' in den NUMBER-Wert 17 und gibt dann den ersten Nicht-NULL-Wert zurück.

    Wenn eine Konvertierung nicht möglich ist, schlägt die implizite Konvertierung fehl. Beispiel: SELECT IFNULL('foo', 1); gibt einen Fehler zurück, da der VARCHAR-Wert 'foo' nicht in einen NUMBER-Wert konvertiert werden kann.

    We recommend passing in arguments of the same type or explicitly converting arguments if needed.

  • Wenn die implizite Konvertierung einen nichtnumerischen Wert in einen numerischen Wert konvertiert, ist das Ergebnis ein Wert vom Typ NUMBER(18,5).

    Wenn bei numerischen Zeichenfolgenargumenten, die keine Konstanten sind, NUMBER(18,5) nicht ausreicht, um den numerischen Wert darzustellen, wandeln Sie das Argument in einen-Typ um, der den Wert darstellen kann.

  • Jeder Ausdruck kann eine SELECT-Anweisung enthalten, die wiederum Mengenoperatoren enthalten kann, wie UNION, INTERSECT, EXCEPT und MINUS. Stellen Sie bei der Verwendung von Mengenoperatoren sicher, dass die Datentypen kompatibel sind. Weitere Informationen dazu finden Sie unter Allgemeine Nutzungshinweise unter dem Thema Mengenoperatoren.

Sortierungsdetails

Rückgabewerte

Gibt den Datentyp des zurückgegebenen Ausdrucks zurück.

Wenn beide Ausdrücke NULL sind, wird NULL zurückgegeben.

Beispiele

Erstellen Sie eine Tabelle, die Kontaktinformationen für Lieferanten enthält:

CREATE TABLE IF NOT EXISTS suppliers (
  supplier_id INT PRIMARY KEY,
  supplier_name VARCHAR(30),
  phone_region_1 VARCHAR(15),
  phone_region_2 VARCHAR(15));
Copy

Die Tabelle enthält die Telefonnummern der einzelnen Anbieter in zwei verschiedenen Regionen. Die Rufnummer kann NULL für eine Region sein.

Fügen Sie Werte in die Tabelle ein:

INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
  VALUES(1, 'Company_ABC', NULL, '555-01111'),
        (2, 'Company_DEF', '555-01222', NULL),
        (3, 'Company_HIJ', '555-01333', '555-01444'),
        (4, 'Company_KLM', NULL, NULL);
Copy

Die folgende SELECT-Anweisung verwendet die Funktion IFNULL, um die Werte von phone_region_1 und phone_region_2 abzurufen.

Dieses Beispiel zeigt die folgenden Ergebnisse für die Funktion IFNULL:

  • Die Spalte IF_REGION_1_NULL enthält den Wert von phone_region_1 oder, wenn dieser Wert NULL ist, den Wert von phone_region_2.

  • Die Spalte IF_REGION_2_NULL enthält den Wert von phone_region_2 oder, wenn dieser Wert NULL ist, den Wert von phone_region_1.

  • Wenn die Werte von phone_region_1 und phone_region_2 beide NULL sind, gibt die Funktion NULL zurück.

SELECT supplier_id,
       supplier_name,
       phone_region_1,
       phone_region_2,
       IFNULL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
       IFNULL(phone_region_2, phone_region_1) IF_REGION_2_NULL
  FROM suppliers
  ORDER BY supplier_id;
Copy
+-------------+---------------+----------------+----------------+------------------+------------------+
| SUPPLIER_ID | SUPPLIER_NAME | PHONE_REGION_1 | PHONE_REGION_2 | IF_REGION_1_NULL | IF_REGION_2_NULL |
|-------------+---------------+----------------+----------------+------------------+------------------|
|           1 | Company_ABC   | NULL           | 555-01111      | 555-01111        | 555-01111        |
|           2 | Company_DEF   | 555-01222      | NULL           | 555-01222        | 555-01222        |
|           3 | Company_HIJ   | 555-01333      | 555-01444      | 555-01333        | 555-01444        |
|           4 | Company_KLM   | NULL           | NULL           | NULL             | NULL             |
+-------------+---------------+----------------+----------------+------------------+------------------+