含千分位逗号的varchar字符串转DECIMAL失败求和报错求助
解决带千分位逗号的字符串转DECIMAL求和问题
问题根源是字符串中的千分位逗号导致DECIMAL转换失败,需要先移除逗号再执行转换和求和操作。以下是主流数据库的解决方案:
MySQL/MariaDB
使用REPLACE函数移除千分位逗号后再转换:
SELECT SUM(CAST(REPLACE("Repaid to IDA (US$)", ',', '') AS DECIMAL(10,4))) FROM "banking_table" WHERE "Country" = 'Bolivia';
PostgreSQL
同样用REPLACE清理字符串,也可以用::操作符简化类型转换:
-- 标准CAST写法 SELECT SUM(CAST(REPLACE("Repaid to IDA (US$)", ',', '') AS DECIMAL(10,4))) FROM "banking_table" WHERE "Country" = 'Bolivia'; -- 简化写法 SELECT SUM(REPLACE("Repaid to IDA (US$)", ',', '')::DECIMAL(10,4)) FROM "banking_table" WHERE "Country" = 'Bolivia';
SQL Server
语法与MySQL类似,通过REPLACE清理后转换:
SELECT SUM(CAST(REPLACE("Repaid to IDA (US$)", ',', '') AS DECIMAL(10,4))) FROM "banking_table" WHERE "Country" = 'Bolivia';
Oracle
可以用TO_NUMBER指定格式转换,或直接用CAST:
-- TO_NUMBER指定格式 SELECT SUM(TO_NUMBER(REPLACE("Repaid to IDA (US$)", ',', ''), '9999999999.9999')) FROM "banking_table" WHERE "Country" = 'Bolivia'; -- CAST写法 SELECT SUM(CAST(REPLACE("Repaid to IDA (US$)", ',', '') AS DECIMAL(10,4))) FROM "banking_table" WHERE "Country" = 'Bolivia';
注意事项
- 确保所有数据移除逗号后为有效数字格式(仅含数字和小数点),若存在其他非数字字符需额外处理。
- 若
DECIMAL(10,4)精度不足(如数值超过99999999.9999),需调整精度参数,例如改为DECIMAL(15,4)避免溢出错误。
内容的提问来源于stack exchange,提问作者leomhujr
相关产品推荐
相关产品推荐

