
# 显式类型转换
显式类型转换主要适用于类型转换函数调用场景，类型转换函数请参考[类型转换函数](https://support.huaweicloud.com/centralized-m-comp-devg-v8-gaussdb/gaussdb-81-0152.html#ZH-CN_TOPIC_0000002559099355)。
显式类型转换语法为：
```
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)
```
 表2JSON类型显式转换行为 
| 参数类型                                                                               | 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字符串标量。                                                                                                  |
   
![](https://support.huaweicloud.com/centralized-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 显式类型转换还可以使用双冒号语法，例如"SELECT 1::INT"；此方法不建议用户使用（可能导致结果不符合预期）。
- 设置兼容性参数m_format_dev_version='s2'后双冒号显式转换行为变更为默认隐式转换逻辑且支持M-Compatibility数据库中新增数据类型（除SET、ENUM类型，该两种类型不支持双冒号类型转换方法）；不设置兼容性参数情况下支持GaussDB原有的双冒号显式转换逻辑，M-Compatibility数据库中新增数据类型暂不支持。
 
