类别:

转换函数

CAST、::

将一种数据类型的值转换为另一种数据类型。CAST 的语义与相应的 TO_ datatype 转换函数的语义相同。如果无法进行转换,则会引发错误。有关更多详细信息,请参阅各个 TO_ datatype 转换函数。有关数据类型转换和 TO_ datatype 转换函数的更多信息,请参阅 数据类型转换

:: 运算符为 CAST 提供替代语法。

另请参阅:

TRY_CAST

语法

CAST( <source_expr> AS <target_data_type> )
  [ RENAME FIELDS | ADD FIELDS ]

<source_expr> :: <target_data_type>
Copy

实参

source_expr

要转换为其他数据类型的任何受支持数据类型的表达式。

target_data_type

要将表达式转换为的数据类型。如果数据类型支持其他属性,例如 总位数和小数位数 (用于数字/小数),则可以包含这些属性。

RENAME FIELDS

对于 结构化 OBJECTs,指定要更改 OBJECT 以使用不同的键值对。原始对象中的值将按其出现的顺序复制到新的键值对中。

有关示例,请参阅 示例:更改 OBJECT 中的键名称

ADD FIELDS

对于 结构化 OBJECTs,指定要将键值对添加到 OBJECT。

有关示例,请参阅 示例:向 OBJECT 添加键

新添加的键的值将设置为 NULL。如果要为这些键赋值,请改为调用 OBJECT_INSERT 函数。

使用说明

  • 如果小数位数不足以容纳输入值,则函数将对值进行四舍五入。

  • 如果总位数不足以容纳输入值,则函数会引发错误。

  • 在将数据卸载到 Parquet 文件时,如果明确地将数值列转换为整数数据类型,则这些列在 Parquet 文件中的数据类型为 INT。有关更多信息,请参阅 将数值列显式转换为 Parquet 数据类型

  • 当您使用 :: 替代语法时,您不能指定 RENAME FIELDSADD FIELDS 实参。

示例

CAST 示例使用下表中的数据:

CREATE OR REPLACE TABLE test_data_type_conversion (
  varchar_value VARCHAR,
  number_value NUMBER(5, 4),
  timestamp_value TIMESTAMP);

INSERT INTO test_data_type_conversion VALUES (
  '9.8765',
  1.2345,
  '2024-05-09 14:32:29.135 -0700');

SELECT * FROM test_data_type_conversion;
Copy
+---------------+--------------+-------------------------+
| VARCHAR_VALUE | NUMBER_VALUE | TIMESTAMP_VALUE         |
|---------------+--------------+-------------------------|
| 9.8765        |       1.2345 | 2024-05-09 14:32:29.135 |
+---------------+--------------+-------------------------+

这些示例使用 SYSTEM$TYPEOF 函数显示转换值的数据类型。

将字符串转换为具有指定小数位数 (2) 的数字:

SELECT CAST(varchar_value AS NUMBER(5,2)) AS varchar_to_number1,
       SYSTEM$TYPEOF(varchar_to_number1) AS data_type
  FROM test_data_type_conversion;
Copy
+--------------------+------------------+
| VARCHAR_TO_NUMBER1 | DATA_TYPE        |
|--------------------+------------------|
|               9.88 | NUMBER(5,2)[SB4] |
+--------------------+------------------+

使用 :: 符号将相同的字符串转换为小数位数为 5 的数字:

SELECT varchar_value::NUMBER(6,5) AS varchar_to_number2,
       SYSTEM$TYPEOF(varchar_to_number2) AS data_type
  FROM test_data_type_conversion;
Copy
+--------------------+------------------+
| VARCHAR_TO_NUMBER2 | DATA_TYPE        |
|--------------------+------------------|
|            9.87650 | NUMBER(6,5)[SB4] |
+--------------------+------------------+

将数字转换为整型。对于整型,无法指定精度和小数位数,因此默认值始终为 NUMBER(38, 0)。

SELECT CAST(number_value AS INTEGER) AS number_to_integer,
       SYSTEM$TYPEOF(number_to_integer) AS data_type
  FROM test_data_type_conversion;
Copy
+-------------------+-------------------+
| NUMBER_TO_INTEGER | DATA_TYPE         |
|-------------------+-------------------|
|                 1 | NUMBER(38,0)[SB1] |
+-------------------+-------------------+

将数字转换为字符串:

SELECT CAST(number_value AS VARCHAR) AS number_to_varchar,
       SYSTEM$TYPEOF(number_to_varchar) AS data_type
  FROM test_data_type_conversion;
Copy
+-------------------+------------------------+
| NUMBER_TO_VARCHAR | DATA_TYPE              |
|-------------------+------------------------|
| 1.2345            | VARCHAR(16777216)[LOB] |
+-------------------+------------------------+

将时间戳转换为日期:

SELECT CAST(timestamp_value AS DATE) AS timestamp_to_date,
       SYSTEM$TYPEOF(timestamp_to_date) AS data_type
  FROM test_data_type_conversion;
Copy
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09        | DATE[SB4] |
+-------------------+-----------+
语言: 中文