Kategorien:

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

ARRAY_MAX

Gibt für ein Eingabe-ARRAY das Element mit dem höchsten Wert zurück, das nicht SQL NULL ist. Wenn das Eingabe-ARRAY leer ist oder nur SQL NULL-Elemente enthält, gibt diese Funktion NULL zurück.

Syntax

ARRAY_MAX( <array> )
Copy

Argumente

array

Das Eingabe-ARRAY.

Rückgabewerte

Diese Funktion gibt einen VARIANT-Wert zurück, der das Element mit dem höchsten Wert enthält, das nicht SQL NULL ist.

Die Funktion gibt NULL zurück, wenn array NULL ist, leer ist oder nur SQL NULL-Elemente enthält.

Nutzungshinweise

  • Ein SQL NULL-Wert unterscheidet sich von einem expliziten Nullwert in semistrukturierten Daten (z. B. ein JSON null in JSON-Daten). Explizite Nullwerte werden bei der Identifizierung des Elements mit dem höchsten Wert berücksichtigt.

  • Die Funktion bestimmt das zurückzugebende Element, indem sie die Elemente im Array vergleicht. Die Funktion unterstützt den Vergleich von Elementen desselben Datentyps oder der folgenden Datentypen:

    • Elemente der Datentypen NUMBER und FLOAT.

    • Elemente der Datentypen TIMESTAMP_LTZ und TIMESTAMP_TZ.

    Wenn das Array Elemente anderer Datentypen enthält, werden die Elemente in einen gemeinsamen Datentyp umgewandelt, wie im folgenden Beispiel gezeigt.

Beispiele

Im folgende Beispiel wird ein VARIANT-Wert zurückgegeben, der das Element mit dem höchsten Wert in einer ARRAY-Konstante enthält:

SELECT ARRAY_MAX([20, 0, NULL, 10, NULL]);
Copy
+------------------------------------+
| ARRAY_MAX([20, 0, NULL, 10, NULL]) |
|------------------------------------|
| 20                                 |
+------------------------------------+

Im folgenden Beispiel wird gezeigt, dass ein JSON null-Wert anders behandelt wird als ein SQL NULL-Wert. Wenn array einen JSON null-Wert enthält, gibt die Funktion den JSON null-Wert zurück.

SELECT ARRAY_MAX([NULL, PARSE_JSON('null'), NULL]);
Copy
+--------------------------------------------------+
| ARRAY_MAX([20, 0, PARSE_JSON('NULL'), 10, NULL]) |
|--------------------------------------------------|
| null                                             |
+--------------------------------------------------+

Im folgenden Beispiel wird gezeigt, dass die Funktion den Wert NULL zurückgibt, wenn das Eingabe-ARRAY leer ist:

SELECT ARRAY_MAX([]);
Copy
+---------------+
| ARRAY_MAX([]) |
|---------------|
| NULL          |
+---------------+

Im folgenden Beispiel wird gezeigt, dass die Funktion den Wert NULL zurückgibt, wenn das Eingabe-ARRAY nur SQL NULL-Werte enthält:

SELECT ARRAY_MAX([NULL, NULL, NULL]);
Copy
+-------------------------+
| ARRAY_MAX([NULL, NULL]) |
|-------------------------|
| NULL                    |
+-------------------------+

Um den Maximalwert in einem Array mit Elementen unterschiedlicher Datentypen zu ermitteln, werden die Elemente in denselben Datentyp umgewandelt. Im folgenden Beispiel wird ein DATE-Element in ein TIMESTAMP-Element umgewandelt, um den Maximalwert im Array zu ermitteln:

SELECT ARRAY_MAX([date1::TIMESTAMP, timestamp1]) AS array_max
  FROM (
      VALUES ('1999-01-01'::DATE, '2023-12-09 22:09:26.000000000'::TIMESTAMP),
             ('2023-12-09'::DATE, '1999-01-01 22:09:26.000000000'::TIMESTAMP)
          AS t(date1, timestamp1)
      );
Copy
+---------------------------+
| ARRAY_MAX                 |
|---------------------------|
| "2023-12-09 22:09:26.000" |
| "2023-12-09 00:00:00.000" |
+---------------------------+