PostgreSQL列数据类型转换报错:格式'9.995.959'不兼容numeric
解决CSV导入后字段转numeric类型的格式错误问题
出现格式'9.995.959'与numeric类型不兼容的错误,是因为你把千分位分隔符(原逗号)替换成点后,字符串出现了多个小数点,而numeric类型只允许单个小数点(或无小数点)的数字格式。按以下步骤修复:
第一步:清理数据中的多余小数点
根据数据实际情况选择操作:- 如果所有数据都是整数(无小数部分):直接移除所有小数点
UPDATE 你的表名 SET 字段名 = REPLACE(字段名, '.', ''); - 如果数据包含小数部分(需要保留最后一个小数点):移除最后一个小数点之前的所有点
UPDATE 你的表名 SET 字段名 = CONCAT( REPLACE(SUBSTRING(字段名, 1, LENGTH(字段名) - POSITION('.' IN REVERSE(字段名))), '.', ''), SUBSTRING(字段名, LENGTH(字段名) - POSITION('.' IN REVERSE(字段名)) + 1) ) WHERE 字段名 LIKE '%.%.%'; -- 仅处理存在多个小数点的行
- 如果所有数据都是整数(无小数部分):直接移除所有小数点
第二步:排查异常数据
检查是否还有非数字格式的字符串,避免后续转换报错:SELECT 字段名 FROM 你的表名 WHERE 字段名 !~ '^[0-9]+(\.[0-9]+)?$';手动处理这些不符合格式的行。
第三步:修改字段类型
数据清理完成后,执行ALTER语句转换类型:ALTER TABLE 你的表名 ALTER COLUMN 字段名 TYPE numeric;
内容的提问来源于stack exchange,提问作者Simone Romualdi
相关产品推荐
相关产品推荐

