カテゴリ:

半構造化データ関数と構造化データ関数 (キャスト)

AS_<オブジェクト型>

この関数群を使用して、 VARIANT 値を他のデータ型の値に厳密にキャストできます。

こちらもご参照ください。

IS_<オブジェクト型>

一般的な使用上の注意

  • 引数 VARIANT 値の型が出力値と一致しない場合は、 NULL が返されます。たとえば、 AS_DATE 関数に DATE 値を含まない VARIANT 値が渡された場合は、 NULL が返されます。

  • 入力が NULL の場合、出力は NULL です。

以下の例では、 AS_object_type 関数を使用します。

VARIANT 列の値を異なるデータ型にキャストします。

テーブルを作成してデータをロードします。

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"}'))); 
Copy

テーブルをクエリし、 VARIANT 列の値を異なるデータ型の値にキャストします。

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; 
Copy
+-------------+-----------------+---------+------+---------+---------+--------+---------+------------------+ | ARRAY1 | ARRAY2 | BOOLEAN | CHAR | VARCHAR | DECIMAL | DOUBLE | INTEGER | OBJECT | |-------------+-----------------+---------+------+---------+---------+--------+---------+------------------| | [ | [ | True | X | Y | 1.230 | 3.21 | 15 | { | | "Example" | "Array-like", | | | | | | | "Tree": "Pine" | | ] | "example" | | | | | | | } | | | ] | | | | | | | | +-------------+-----------------+---------+------+---------+---------+--------+---------+------------------+ 

VARIANT 列の数値の平均を計算します。

vartab テーブルにある VARIANT 列の全数値の平均を計算します。

テーブルを作成してデータをロードします。

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

値のデータ型を表示します(数値の場合もあり)。

SELECT n, AS_REAL(v), TYPEOF(v) FROM vartab ORDER BY n; 
Copy
+---+------------+------------+ | 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 | +---+------------+------------+ 

VARIANT 列 v の全数値の平均を計算するには、 AVG 関数とともに AS_REAL 関数を使用します。

SELECT AVG(AS_REAL(v)) FROM vartab; 
Copy
+-----------------+ | AVG(AS_REAL(V)) | |-----------------| | 99.106666667 | +-----------------+