Categorias:

Funções de dados semiestruturados e estruturados (Matriz/objeto)

ARRAY_MAX

Considerando uma ARRAY de entrada, retorna o elemento com o valor mais alto que não seja SQL NULL. Se a ARRAY de entrada estiver vazia ou contiver apenas elementos SQL NULL, esta função retornará NULL.

Sintaxe

ARRAY_MAX( <array> )
Copy

Argumentos

array

A ARRAY de entrada.

Retornos

Esta função retorna um VARIANT que contém o elemento com o valor mais alto que não seja SQL NULL.

A função retorna NULL se array for NULL, vazio ou contiver apenas elementos SQL NULL.

Notas de uso

  • Um SQL NULL é diferente de um valor nulo explícito em dados semiestruturados (por exemplo, um JSON nulo em dados JSON). Valores nulos explícitos são considerados na identificação do elemento com o valor mais alto.

  • A função determina o elemento a ser retornado comparando os elementos da matriz. A função oferece suporte à comparação de elementos do mesmo tipo de dados ou dos seguintes tipos de dados:

    • Elementos dos tipos de dados NUMBER e FLOAT.

    • Elementos dos tipos de dados TIMESTAMP_LTZ e TIMESTAMP_TZ.

    Se a matriz contiver elementos de outros tipos de dados, converta os elementos em um tipo de dados comum, conforme mostrado no exemplo abaixo.

Exemplos

O exemplo a seguir retorna um VARIANT contendo o elemento com o valor mais alto em uma constante ARRAY:

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

O exemplo a seguir demonstra que um nulo JSON é tratado de maneira diferente de um SQL NULL. Se array contiver um nulo JSON, a função retornará o nulo JSON.

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

O exemplo a seguir demonstra que a função retorna NULL se a ARRAY de entrada estiver vazia:

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

O exemplo a seguir demonstra que a função retorna NULL se a ARRAY de entrada contiver apenas SQL NULLs:

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

Para determinar o valor máximo em uma matriz com elementos de diferentes tipos de dados, converta os elementos para o mesmo tipo de dados. O exemplo a seguir converte um elemento DATE em um elemento TIMESTAMP para determinar o valor máximo na matriz:

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" |
+---------------------------+