AS_*<object_type>*
AS_<object_type>
이 함수군을 사용하면 VARIANT 값을 다른 데이터 타입의 값으로 엄격하게(strict) 캐스팅할 수 있어요.
AS_ARRAY, AS_BINARY, AS_BOOLEAN, AS_CHAR, AS_VARCHAR, AS_DATE, AS_DECIMAL, AS_NUMBER, AS_DOUBLE, AS_REAL, AS_INTEGER, AS_OBJECT, AS_TIME, AS_TIMESTAMP_*
AS_ARRAYAS_BINARYAS_BOOLEANAS_CHAR,AS_VARCHARAS_DATEAS_DECIMAL,AS_NUMBERAS_DOUBLE,AS_REALAS_INTEGERAS_OBJECTAS_TIMEAS_TIMESTAMP_*
본문
일반 사용상 주의사항
- 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"}'))));
테이블을 조회하고 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;
+-------------+-----------------+---------+------+---------+---------+--------+---------+------------------+
| 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;
값의 데이터 타입(일부는 숫자)을 보여줘요.
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 |
+---+------------+------------+
AS_REAL 함수를 AVG 함수와 함께 사용해 VARIANT 컬럼 v의 모든 숫자 값의 평균을 계산해요.
SELECT AVG(AS_REAL(v)) FROM vartab;
+-----------------+
| AVG(AS_REAL(V)) |
|-----------------|
| 99.106666667 |
+-----------------+