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_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_*

출처: Snowflake SQL Reference - AS_*<object_type>

본문

일반 사용상 주의사항

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

더 알아보기