显式类型转换
显式类型转换主要适用于类型转换函数调用场景,类型转换函数请参考类型转换函数。
显式类型转换语法为:
SELECT CAST(expression AS data_type);
其中expression是要转换的表达式及data_type要转换成的数据类型如表1和表2所示。
| 目标类型 | 用于承接输入值的数据类型(返参类型) |
|---|---|
| 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) | 参数类型 | 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数据库中新增数据类型暂不支持。