Catégories :

Fonctions de données semi-structurées et structurées (conversion)

AS_<type_objet>

Cette famille de fonctions peut être utilisée pour effectuer une conversion stricte des valeurs VARIANT en d’autres types de données :

Voir aussi :

IS_<type_objet>

Notes générales sur l’utilisation

  • Si le type de valeur dans l’argument VARIANT ne correspond pas à la valeur de sortie, alors la valeur NULL est renvoyée. Par exemple, si AS_DATE() reçoit une valeur VARIANT qui ne contient pas de DATE, alors NULL est renvoyé.

  • Si l’entrée est NULL, la sortie est NULL.

Exemples

Calculez la moyenne de toutes les valeurs numériques d’une colonne de type variant dans la table vartab :

Commencez par créer la table et y charger les données.

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

Deuxièmement, affichez les types de données des valeurs (dont certaines sont numériques et d’autres non) :

select n, as_real(v), typeof(v)
    from vartab
    order by n;
+---+------------+------------+
| N | AS_REAL(V) | TYPEOF(V)  |
|---+------------+------------|
| 1 |       NULL | NULL_VALUE |
| 2 |       NULL | NULL       |
| 3 |       NULL | BOOLEAN    |
| 4 |     -17    | INTEGER    |
| 5 |     123.12 | DECIMAL    |
| 6 |     191.2  | DOUBLE     |
| 7 |       NULL | VARCHAR    |
| 8 |       NULL | ARRAY      |
| 9 |       NULL | OBJECT     |
+---+------------+------------+
Copy

Troisièmement, calculez la moyenne de toutes les valeurs numériques à partir de la colonne VARIANT :

select avg(as_real(v)) from vartab;
+-----------------+
| AVG(AS_REAL(V)) |
|-----------------|
|    99.106666667 |
+-----------------+
Copy