显式类型转换
显式类型转换主要适用于类型转换函数调用场景,类型转换函数请参考类型转换函数。
显式类型转换语法为:
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数据库中新增数据类型暂不支持。