
# 数据类型转换出现报错：invalid input syntax for xxx
#### 问题现象
某张表的某个字段类型为varchar(20)，数据为5.0，在使用cast(xxx as integer)转换成整数型时报错：invalid input syntax for integer 5.0。
![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001414085988.png "点击放大")
#### 原因分析
在SQL语句执行过程中，若遇到类似invalid input syntax for integer/bigint/numeric等报错的问题，基本都是数据类型之间转换导致，如字符a或空格转换成integer、bigint类型时触发。
在熟悉DWS的数值类型和字符类型后，可以避免数据类型的使用问题，参考[数据类型](https://support.huaweicloud.com/sqlreference-dws/dws_06_0008.html)章节。
#### 处理方法
以上述问题现象中的"字符串类型varchar直接转换为整数型integer"报错为例，可以先将字段类型修改为decimal（任意精度型）再进行转换来处理。
具体的操作步骤如下：
1. 假设报错表名为product，表定义如下： 
   ```
   SELECT * FROM PG_GET_TABLEDEF('product');
   ```
   ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001464481813.png "点击放大")
   
   
2. 将查询结果转换为整数型。 
   ```
   SELECT CAST(price AS integer) FROM product;
   ```
   出现如下报错：
   ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001464486029.png "点击放大")
   
   
3. 修改表字段的数据类型为decimal。 
   ```
   ALTER TABLE product ALTER COLUMN price TYPE decimal(10,1);
   ```
   
   
4. 成功转换字段为整数型。 
   ```
   SELECT CAST(price AS integer) FROM product;
   ```
   ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001464605721.png "点击放大")
   
   
