Categorias:

Funções de dados semiestruturados (Extração)

GET

Extrai um valor de um ARRAY ou um OBJECT (ou uma VARIANT que contém um ARRAY ou um OBJECT).

A função retorna NULL se qualquer um dos argumentos for NULL.

Note que esta função não deve ser confundida com o comando GET DML.

Consulte também:

GET_IGNORE_CASE , GET_PATH , :

Sintaxe

ARRAY (ou VARIANT contendo um ARRAY)

GET( <array> , <index> )

GET( <variant> , <index> )
Copy

OBJECT (ou VARIANT contendo um OBJECT)

GET( <object> , <field_name> )

GET( <variant> , <field_name> )
Copy

Argumentos

object

Uma expressão que avalia como um OBJECT que contém pares chave-valor.

field_name

Uma expressão que avalia como um VARCHAR. Isto especifica a chave em um par chave-valor para o qual você deseja recuperar o valor.

Se o OBJECT não contém a chave especificada, esta função retorna NULL.

O field_name não deve ser uma cadeia de caracteres vazia.

array

Uma expressão que avalia como um ARRAY.

index

Uma expressão que avalia como um INTEGER. Isso especifica a posição do elemento a ser recuperado de ARRAY. A posição é baseada em 0, não em 1.

Se o elemento indexado apontar para fora dos limites da matriz, ou se o elemento indexado não existir (em uma matriz esparsa), então esta função retornará NULL.

variant

Uma expressão que avalia como um VARIANT que contém um ARRAY ou um OBJECT.

Retornos

O tipo de dados do valor retornado é VARIANT.

O valor retornado é o elemento especificado do ARRAY, ou o valor que corresponde à chave especificada de um par chave-valor no OBJECT. O tipo de dados é VARIANT porque:

  • Em um ARRAY, cada elemento é do tipo VARIANT.

  • Em um OBJECT, o valor em cada par chave-valor é do tipo VARIANT.

Notas de uso

  • GET aplica a correspondência que diferencia maiúsculas e minúsculas a field_name. Para correspondência que não diferencia maiúsculas e minúsculas, utilize GET_IGNORE_CASE.

  • Se o primeiro parâmetro for do tipo VARIANT:

    • Se o segundo parâmetro for do tipo VARCHAR (por exemplo, um field_name), a função retorna NULL se variant não contiver um OBJECT.

    • Se o segundo parâmetro for do tipo INTEGER (por exemplo, um index), a função retorna NULL se variant não contiver um ARRAY.

Exemplos

Criar uma tabela com dados de amostra:

CREATE TABLE vartab (a ARRAY, o OBJECT, v VARIANT);
INSERT INTO vartab (a, o, v) 
  SELECT
    ARRAY_CONSTRUCT(2.71, 3.14),
    OBJECT_CONSTRUCT('Ukraine', 'Kyiv'::VARIANT, 
                     'France',  'Paris'::VARIANT),
    TO_VARIANT(OBJECT_CONSTRUCT('weatherStationID', 42::VARIANT,
                     'timestamp', '2022-03-07 14:00'::TIMESTAMP_LTZ::VARIANT,
                     'temperature', 31.5::VARIANT,
                     'sensorType', 'indoor'::VARIANT))
    ;
Copy
SELECT a, o, v FROM vartab;
+---------+----------------------+-------------------------------------------------+
| A       | O                    | V                                               |
|---------+----------------------+-------------------------------------------------|
| [       | {                    | {                                               |
|   2.71, |   "France": "Paris", |   "sensorType": "indoor",                       |
|   3.14  |   "Ukraine": "Kyiv"  |   "temperature": 31.5,                          |
| ]       | }                    |   "timestamp": "2022-03-07 14:00:00.000 -0800", |
|         |                      |   "weatherStationID": 42                        |
|         |                      | }                                               |
+---------+----------------------+-------------------------------------------------+
Copy

Extrair o primeiro elemento de um ARRAY:

SELECT GET(a, 0) FROM vartab;
+-----------+
| GET(A, 0) |
|-----------|
| 2.71      |
+-----------+
Copy

Dado o nome de um país, extrair o nome da capital desse país de um OBJECT contendo os nomes dos países e das capitais:

SELECT GET(o, 'Ukraine') FROM vartab;
+-------------------+
| GET(O, 'UKRAINE') |
|-------------------|
| "Kyiv"            |
+-------------------+
Copy

Extrair a temperatura de um VARIANT que contém um OBJECT:

SELECT GET(v, 'temperature') FROM vartab;
+-----------------------+
| GET(V, 'TEMPERATURE') |
|-----------------------|
| 31.5                  |
+-----------------------+
Copy

Para exemplos mais detalhados, consulte Consulta de dados semiestruturados.

Para exemplos de uso de GET com XMLGET, consulte as seções Exemplos e Notas de uso em XMLGET.