更新时间:2025-09-12 GMT+08:00
分享

显式类型转换

显式类型转换主要适用于类型转换函数调用场景,类型转换函数请参考类型转换函数

显式类型转换语法为:

SELECT CAST(expression AS data_type);

其中expression是要转换的表达式及data_type要转换成的数据类型如表1表2所示。

表1 显式cast转换

目标类型

用于承接输入值的数据类型(返参类型)

SIGNED [INTEGER]

BIGINT

UNSIGNED [INTEGER]

BIGINT UNSIGNED

DATE

DATE

TIME

TIME

DATETIME

DATETIME

BINARY

TEXT

CHAR

TEXT

DECIMAL

NUMERIC

FLOAT

FLOAT4

DOUBLE

FLOAT8

JSON

JSON

示例:

-- signed显式cast用法。
m_db=# SELECT CAST(9223372036854775808 AS SIGNED);
         cast         
----------------------
 -9223372036854775808
(1 row)

-- 边界值处理。
m_db=# SELECT CAST(9223372036854775808.0 AS SIGNED);
WARNING:  Truncated incorrect DECIMAL value: '9223372036854775808.0'
CONTEXT:  referenced column: cast
        cast         
---------------------
 9223372036854775807
(1 row)

-- char显式cast用法(修饰符限定边界)。
m_db=# SELECT CAST(123 AS CHAR(3));
 cast 
------
 123
(1 row)
表2 JSON类型显式转换行为

参数类型

CAST(expression AS JSON)

TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT、VARCHAR、CHAR、字符串常量

作为输入文本解析成JSON格式,返回相应的JSON类型(包括NULL、BOOLEAN、INTEGER,UNSIGNED INTEGER、DOUBLE、STRING、ARRAY、OBJECT类型),如果不符合JSON语法,会产生ERROR。

INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT

转换为INTEGER类型的JSON数字标量。

INT UNSIGNED、TINYINT UNSIGNED、SMALLINT UNSIGNED、MEDIUMINT UNSIGNED、BIGINT UNSIGNED

转换为UNSIGNED INTEGER类型的JSON数字标量。

FLOAT4、FLOAT8

转换为DOUBLE类型的JSON数字标量。

NUMERIC

转换为DECIMAL类型的JSON数字标量。

BLOB、TINYBLOB、MEDIUMBLOB、LONGBLOB、BINARY、VARBINARY

转换为BLOB类型的JSON字符串标量。

BIT

转换为BIT类型的JSON字符串标量。

YEAR

转换为OPAQUE类型的JSON字符串标量。

TIME

转换为TIME类型的JSON字符串标量。

DATE

转换为DATE类型的JSON字符串标量。

TIMESTAMP

转换为TIMESTAMP类型的JSON字符串标量。

DATETIME

转换为DATETIME类型的JSON字符串标量。

JSON

返回值为输入的JSON参数。

SET、ENUM

转换为STRING类型的JSON字符串标量。

  • 显式类型转换还可以使用双冒号语法,例如“SELECT 1::INT”;此方法不建议用户使用(可能导致结果不符合预期)。
  • 设置兼容性参数m_format_dev_version='s2'后双冒号显式转换行为变更为默认隐式转换逻辑且支持M-Compatibility数据库中新增数据类型(除SET、ENUM类型,该两种类型不支持双冒号类型转换方法);不设置兼容性参数情况下支持GaussDB原有的双冒号显式转换逻辑,M-Compatibility数据库中新增数据类型暂不支持。

相关文档