Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)

OBJECT_CONSTRUCT_KEEP_NULL

Gibt ein OBJECT zurück, das aus den Argumenten konstruiert wurde und die Schlüssel-Wert-Paare mit NULL Werten enthält.

Siehe auch:

OBJECT_CONSTRUCT

Syntax

OBJECT_CONSTRUCT_KEEP_NULL( [<key>, <value> [, <key>, <value> , ...]] )

OBJECT_CONSTRUCT_KEEP_NULL(*)
Copy

Argumente

key

Der Schlüssel in einem Schlüssel-Wert-Paar. Jeder Schlüssel ist ein VARCHAR-Wert.

value

Der mit dem Schlüssel verbundene Wert Der Wert kann ein beliebiger Datentyp sein.

*

Beim Aufrufen mit einem Sternchen (Platzhalter) wird der OBJECT-Wert aus den angegebenen Daten unter Verwendung der Attributnamen als Schlüssel und der zugeordneten Werte als Wert erstellt. Siehe die Beispiele unten.

Wenn Sie einen Platzhalter an die Funktion übergeben, können Sie den Platzhalter mit dem Namen oder Alias für die Tabelle qualifizieren. Um beispielsweise alle Spalten aus der Tabelle mytable zu übergeben, geben Sie Folgendes ein:

(mytable.*)
Copy

Sie können auch die Schlüsselwörter ILIKE und EXCLUDE zum Filtern verwenden:

  • ILIKE filtert nach Spaltennamen, die dem angegebenen Muster entsprechen. Es ist nur ein Muster erlaubt. Beispiel:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE filtert Spaltennamen heraus, die nicht mit der angegebenen Spalte oder den angegebenen Spalten übereinstimmen. Beispiel:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

Qualifizierer sind gültig, wenn Sie diese Schlüsselwörter verwenden. Das folgende Beispiel verwendet das Schlüsselwort ILIKE, um nach allen Spalten zu filtern, die dem Muster col1% in der Tabelle mytable entsprechen:

(mytable.* ILIKE 'col1%')
Copy

Die Schlüsselwörter ILIKE und EXCLUDE können nicht in einem einzigen Funktionsaufruf kombiniert werden.

Für diese Funktion sind die Schlüsselwörter ILIKE und EXCLUDE nur in einer SELECT-Liste oder GROUP BY-Klausel gültig.

Weitere Informationen zu den Schlüsselwörtern ILIKE und EXCLUDE finden Sie im Abschnitt „Parameter“ unter SELECT.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist OBJECT.

Nutzungshinweise

  • Wenn der Schlüssel NULL (d. h. SQL NULL) ist, wird das Schlüssel-Wert-Paar im resultierenden Objekt weggelassen. Wenn der Wert jedoch NULL ist, wird das Schlüssel-Wert-Paar beibehalten.

  • Das konstruierte Objekt behält nicht unbedingt die ursprüngliche Reihenfolge der Schlüssel-Wert-Paare bei.

Beispiele

Diese Beispiel zeigt den Unterschied zwischen OBJECT_CONSTRUCT und OBJECT_CONSTRUCT_KEEP_NULL:

SELECT OBJECT_CONSTRUCT('key_1', 'one', 'key_2', NULL) AS WITHOUT_KEEP_NULL,
       OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', 'key_2', NULL) AS KEEP_NULL_1,
       OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', NULL, 'two') AS KEEP_NULL_2;
Copy
+-------------------+-------------------+------------------+
| WITHOUT_KEEP_NULL | KEEP_NULL_1       | KEEP_NULL_2      |
|-------------------+-------------------+------------------|
| {                 | {                 | {                |
|   "key_1": "one"  |   "key_1": "one", |   "key_1": "one" |
| }                 |   "key_2": null   | }                |
|                   | }                 |                  |
+-------------------+-------------------+------------------+

Das folgende Beispiel zeigt auch den Unterschied zwischen OBJECT_CONSTRUCT und OBJECT_CONSTRUCT_KEEP NULL, wobei hier aber eine kleine Tabelle verwendet wird (die vor der Abfrage angezeigt wird):

CREATE TABLE demo_table_1_with_nulls (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1_with_nulls (province, created_date) VALUES
  ('Manitoba', '2024-01-18'::DATE),
  ('British Columbia', NULL),
  ('Alberta', '2024-01-19'::DATE),
  (NULL, '2024-01-20'::DATE);
Copy
SELECT *
  FROM demo_table_1_with_nulls
  ORDER BY province;
Copy
+------------------+--------------+
| PROVINCE         | CREATED_DATE |
|------------------+--------------|
| Alberta          | 2024-01-19   |
| British Columbia | NULL         |
| Manitoba         | 2024-01-18   |
| NULL             | 2024-01-20   |
+------------------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc,
       OBJECT_CONSTRUCT_KEEP_NULL(*) AS oc_keep_null
  FROM demo_table_1_with_nulls
  ORDER BY oc_keep_null['PROVINCE'];
Copy
+----------------------------------+----------------------------------+
| OC                               | OC_KEEP_NULL                     |
|----------------------------------+----------------------------------|
| {                                | {                                |
|   "CREATED_DATE": "2024-01-19",  |   "CREATED_DATE": "2024-01-19",  |
|   "PROVINCE": "Alberta"          |   "PROVINCE": "Alberta"          |
| }                                | }                                |
| {                                | {                                |
|   "PROVINCE": "British Columbia" |   "CREATED_DATE": null,          |
| }                                |   "PROVINCE": "British Columbia" |
|                                  | }                                |
| {                                | {                                |
|   "CREATED_DATE": "2024-01-18",  |   "CREATED_DATE": "2024-01-18",  |
|   "PROVINCE": "Manitoba"         |   "PROVINCE": "Manitoba"         |
| }                                | }                                |
| {                                | {                                |
|   "CREATED_DATE": "2024-01-20"   |   "CREATED_DATE": "2024-01-20",  |
| }                                |   "PROVINCE": null               |
|                                  | }                                |
+----------------------------------+----------------------------------+

Für Beispiele, die die eng verwandte Funktion OBJECT_CONSTRUCT verwenden, siehe OBJECT_CONSTRUCT.