Categorias:

Funções de dados semiestruturados e estruturados (Predicados de tipo)

TYPEOF

Retorna o tipo de um valor armazenado em uma coluna VARIANT. O tipo é retornado como cadeia de caracteres.

Consulte também:

IS_<tipo_de_objeto> , SYSTEM$TYPEOF

Sintaxe

TYPEOF( <expr> )
Copy

Argumentos

expr

O argumento pode ser um nome de coluna ou uma expressão geral do tipo VARIANT. Se necessário, você pode transmitir o expr para um VARIANT.

Retornos

Retorna um VARCHAR que contém o tipo de dados da expressão de entrada, como BOOLEAN, DECIMAL, ARRAY, OBJECT etc.

Notas de uso

  • A cadeia de caracteres retornada pode ser DECIMAL mesmo que a entrada seja um número inteiro exato, devido a otimizações que alteram o tipo de armazenamento físico da entrada.

  • Esta função não oferece suporte a um tipo estruturado como argumento de entrada.

Exemplos

Criar uma tabela que contenha diferentes tipos de dados armazenados em uma coluna VARIANT, depois usar a função TYPEOF para determinar os tipos de dados de cada.

Crie e preencha uma tabela. Observe que a instrução INSERT usa a função PARSE_JSON.

CREATE OR REPLACE TABLE vartab (n NUMBER(2), v VARIANT);

INSERT INTO vartab
    SELECT column1 AS n, PARSE_JSON(column2) AS v
    FROM VALUES (1, 'null'), 
                (2, null), 
                (3, 'true'),
                (4, '-17'), 
                (5, '123.12'), 
                (6, '1.912e2'),
                (7, '"Om ara pa ca na dhih"  '), 
                (8, '[-1, 12, 289, 2188, false,]'), 
                (9, '{ "x" : "abc", "y" : false, "z": 10} ') 
       AS vals;
Copy

Consultar os dados:

SELECT n, v, TYPEOF(v)
    FROM vartab
    ORDER BY n;
Copy
+---+------------------------+------------+
| N | V                      | TYPEOF(V)  |
|---+------------------------+------------|
| 1 | null                   | NULL_VALUE |
| 2 | NULL                   | NULL       |
| 3 | true                   | BOOLEAN    |
| 4 | -17                    | INTEGER    |
| 5 | 123.12                 | DECIMAL    |
| 6 | 1.912000000000000e+02  | DOUBLE     |
| 7 | "Om ara pa ca na dhih" | VARCHAR    |
| 8 | [                      | ARRAY      |
|   |   -1,                  |            |
|   |   12,                  |            |
|   |   289,                 |            |
|   |   2188,                |            |
|   |   false,               |            |
|   |   undefined            |            |
|   | ]                      |            |
| 9 | {                      | OBJECT     |
|   |   "x": "abc",          |            |
|   |   "y": false,          |            |
|   |   "z": 10              |            |
|   | }                      |            |
+---+------------------------+------------+

O exemplo a seguir usa a função TYPEOF para determinar o tipo de dados de um valor transformando o valor em um VARIANT.

Crie e preencha uma tabela.

CREATE OR REPLACE TABLE typeof_cast(status VARCHAR, time TIMESTAMP);

INSERT INTO typeof_cast VALUES('check in', '2024-01-17 19:00:00.000 -0800');
Copy

Consulte a tabela usando a função TYPEOF convertendo cada valor em VARIANT:

SELECT status,
       TYPEOF(status::VARIANT) AS "TYPE OF STATUS",
       time,
       TYPEOF(time::VARIANT) AS "TYPE OF TIME"
  FROM  typeof_cast;
Copy
+----------+----------------+-------------------------+---------------+
| STATUS   | TYPE OF STATUS | TIME                    | TYPE OF TIME  |
|----------+----------------+-------------------------+---------------|
| check in | VARCHAR        | 2024-01-17 19:00:00.000 | TIMESTAMP_NTZ |
+----------+----------------+-------------------------+---------------+