- Catégories :
Fonctions de données semi-structurées et structurées (conversion)
AS_<type_objet>¶
Vous pouvez utiliser cette famille de fonctions pour effectuer une conversion stricte des valeurs VARIANT en d’autres valeurs de types de données :
- Voir aussi :
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 la fonction AS_DATE reçoit une valeur VARIANT qui ne contient pas de valeur DATE, alors NULL est renvoyé.
Si l’entrée est NULL, la sortie est NULL.
Exemples¶
Les exemples suivants utilisent les fonctions AS_object_type
.
Convertir les valeurs des colonnes VARIANT en différents types de données¶
Créer la table et y charger des données :
CREATE OR REPLACE TABLE multiple_types_example (
array1 VARIANT,
array2 VARIANT,
boolean1 VARIANT,
char1 VARIANT,
varchar1 VARIANT,
decimal1 VARIANT,
double1 VARIANT,
integer1 VARIANT,
object1 VARIANT);
INSERT INTO multiple_types_example
(array1, array2, boolean1, char1, varchar1,
decimal1, double1, integer1, object1)
SELECT
TO_VARIANT(TO_ARRAY('Example')),
TO_VARIANT(ARRAY_CONSTRUCT('Array-like', 'example')),
TO_VARIANT(TRUE),
TO_VARIANT('X'),
TO_VARIANT('Y'),
TO_VARIANT(1.23::DECIMAL(6, 3)),
TO_VARIANT(3.21::DOUBLE),
TO_VARIANT(15),
TO_VARIANT(TO_OBJECT(PARSE_JSON('{"Tree": "Pine"}')));
Interroger la table et convertir les valeurs des colonnes VARIANT en valeurs de différents types de données :
SELECT AS_ARRAY(array1) AS array1,
AS_ARRAY(array2) AS array2,
AS_BOOLEAN(boolean1) AS boolean,
AS_CHAR(char1) AS char,
AS_VARCHAR(varchar1) AS varchar,
AS_DECIMAL(decimal1, 6, 3) AS decimal,
AS_DOUBLE(double1) AS double,
AS_INTEGER(integer1) AS integer,
AS_OBJECT(object1) AS object
FROM multiple_types_example;
+-------------+-----------------+---------+------+---------+---------+--------+---------+------------------+
| ARRAY1 | ARRAY2 | BOOLEAN | CHAR | VARCHAR | DECIMAL | DOUBLE | INTEGER | OBJECT |
|-------------+-----------------+---------+------+---------+---------+--------+---------+------------------|
| [ | [ | True | X | Y | 1.230 | 3.21 | 15 | { |
| "Example" | "Array-like", | | | | | | | "Tree": "Pine" |
| ] | "example" | | | | | | | } |
| | ] | | | | | | | |
+-------------+-----------------+---------+------+---------+---------+--------+---------+------------------+
Calculer la moyenne des valeurs numériques d’une colonne VARIANT¶
Calculer la moyenne de toutes les valeurs numériques d’une colonne VARIANT dans la table vartab
:
Créer la table et y charger des 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;
Afficher les types de données des valeurs (dont certaines sont numériques) :
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 |
+---+------------+------------+
Utiliser la fonction AS_REAL avec la fonction AVG pour calculer la moyenne de toutes les valeurs numériques à partir de la colonne VARIANT v
:
SELECT AVG(AS_REAL(v)) FROM vartab;
+-----------------+
| AVG(AS_REAL(V)) |
|-----------------|
| 99.106666667 |
+-----------------+