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

RedShift中CASE WHEN构造后NUMERIC数值被四舍五入问题咨询

问题原因
  • 核心原因是RedShift中未指定参数的NUMERIC类型默认定义为NUMERIC(38,0),其中第二个参数为标度,代表小数部分的存储位数,默认值0代表仅支持整数存储,所有小数部分会被自动四舍五入。
  • 你的代码中直接使用:: NUMERIC做强制类型转换,未指定小数位,才会出现2.52被四舍五入为3的现象。
存在的操作错误
  1. 强制转换数值类型时未指定匹配业务需求的精度和标度,触发了RedShift的默认整数存储规则
  2. 存在潜在类型转换异常风险:原字段s.files_duration为字符串类型,仅做非空判断就直接转数值,若字段中存在非数字格式的字符串,会直接触发SQL运行报错。
修复方案

根据你需要保留2位小数的需求,指定NUMERIC的精度和标度即可,修改后代码如下:

CASE
    WHEN s.files_duration != '' THEN s.files_duration
    ELSE '0.0' 
END :: NUMERIC(10,2) AS files_duration_2

如果需要兼容非数字格式的异常值,可以改用TRY_CAST避免报错,简化写法如下:

COALESCE(TRY_CAST(s.files_duration AS NUMERIC(10,2)), 0.0) AS files_duration_2

*注:NUMERIC的第一个参数为总位数,第二个参数为小数位数,可根据你实际的数值范围调整,例如需要存储最大999999.99的数值可使用NUMERIC(8,2)。

内容的提问来源于stack exchange,提问作者Viktor Andriichuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:04