You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含千分位逗号的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:49:53