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