类别:

半结构化和结构化数据函数 (类型谓词)

TYPEOF

返回存储在 VARIANT 列中的值的类型。类型以字符串形式返回。

另请参阅:

IS_<object_type>SYSTEM$TYPEOF

语法

TYPEOF( <expr> )
Copy

实参

expr

实参可以是列名或类型 VARIANT 的通用表达式。如有必要,您可以将 expr 转换 为 VARIANT。

返回

返回包含输入表达式数据类型的 VARCHAR,例如 BOOLEAN、DECIMAL、ARRAY、OBJECT 等。

使用说明

  • 即使输入是精确的整数,返回的字符串也可能是 DECIMAL,因为优化会更改输入的物理存储类型。

示例

创建一个表,其中包含存储在 VARIANT 列中的不同类型数据,然后使用 TYPEOF 函数确定每条数据的数据类型。

创建并填充表。请注意,INSERT 语句使用 PARSE_JSON 函数。

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, v, TYPEOF(v)
    FROM vartab
    ORDER BY n;
Copy
+---+------------------------+------------+
| N | V                      | TYPEOF(V)  |
|---+------------------------+------------|
| 1 | null                   | NULL_VALUE |
| 2 | NULL                   | NULL       |
| 3 | true                   | BOOLEAN    |
| 4 | -17                    | INTEGER    |
| 5 | 123.12                 | DECIMAL    |
| 6 | 1.912000000000000e+02  | DOUBLE     |
| 7 | "Om ara pa ca na dhih" | VARCHAR    |
| 8 | [                      | ARRAY      |
|   |   -1,                  |            |
|   |   12,                  |            |
|   |   289,                 |            |
|   |   2188,                |            |
|   |   false,               |            |
|   |   undefined            |            |
|   | ]                      |            |
| 9 | {                      | OBJECT     |
|   |   "x": "abc",          |            |
|   |   "y": false,          |            |
|   |   "z": 10              |            |
|   | }                      |            |
+---+------------------------+------------+

以下示例使用 TYPEOF 函数通过将值 转换 为 VARIANT 来确定值的数据类型。

创建并填充表:

CREATE OR REPLACE TABLE typeof_cast(status VARCHAR, time TIMESTAMP);

INSERT INTO typeof_cast VALUES('check in', '2024-01-17 19:00:00.000 -0800');
Copy

使用 TYPEOF 函数通过将每个值转换为 VARIANT 来查询表:

SELECT status,
       TYPEOF(status::VARIANT) AS "TYPE OF STATUS",
       time,
       TYPEOF(time::VARIANT) AS "TYPE OF TIME"
  FROM  typeof_cast;
Copy
+----------+----------------+-------------------------+---------------+
| STATUS   | TYPE OF STATUS | TIME                    | TYPE OF TIME  |
|----------+----------------+-------------------------+---------------|
| check in | VARCHAR        | 2024-01-17 19:00:00.000 | TIMESTAMP_NTZ |
+----------+----------------+-------------------------+---------------+
语言: 中文