Catégories :

Fonctions de données semi-structurées et structurées (prédicats de type)

TYPEOF

Indique le type d’une valeur stockée dans une colonne VARIANT.

Voir aussi :

IS_<type_objet> , SYSTEM$TYPEOF

Syntaxe

TYPEOF( <expr> )
Copy

Arguments

expr

L’argument peut être un nom de colonne ou une expression générale de type VARIANT. Si nécessaire, vous pouvez convertir le expr vers un VARIANT.

Renvoie

Renvoie une valeur VARCHAR qui contient le type de données de l’expression d’entrée, comme BOOLEAN, DECIMAL, ARRAY, OBJECT et ainsi de suite.

Notes sur l’utilisation

  • La chaîne renvoyée peut être DECIMAL même si l’entrée est un entier exact, en raison d’optimisations qui modifient le type de stockage physique de l’entrée.

  • Cette fonction ne prend pas en charge un type structuré comme argument d’entrée.

Exemples

Créer et remplir la table vartab. L’instruction INSERT utilise la fonction PARSE_JSON pour insérer des valeurs VARIANT dans la colonne v de la table.

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

Interroger les données. La requête utilise la fonction TYPEOF pour afficher les types de données des valeurs stockées dans la colonne VARIANT.

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

L’exemple suivant utilise la fonction TYPEOF pour déterminer le type de données d’une valeur en convertissant la valeur dans un VARIANT.

Créer et remplir une table :

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

Interrogez la table à l’aide de la fonction TYPEOF en convertissant chaque valeur en 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 |
+----------+----------------+-------------------------+---------------+