- 类别:
半结构化和结构化数据函数 (类型谓词)
TYPEOF¶
返回存储在 VARIANT 列中的值的类型。类型以字符串形式返回。
语法¶
TYPEOF( <expr> )
实参¶
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;查询数据:
SELECT n, v, TYPEOF(v) FROM vartab ORDER BY n;+---+------------------------+------------+ | 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');使用 TYPEOF 函数通过将每个值转换为 VARIANT 来查询表:
SELECT status, TYPEOF(status::VARIANT) AS "TYPE OF STATUS", time, TYPEOF(time::VARIANT) AS "TYPE OF TIME" FROM typeof_cast;+----------+----------------+-------------------------+---------------+ | STATUS | TYPE OF STATUS | TIME | TYPE OF TIME | |----------+----------------+-------------------------+---------------| | check in | VARCHAR | 2024-01-17 19:00:00.000 | TIMESTAMP_NTZ | +----------+----------------+-------------------------+---------------+