使用TRUNC函数未返回指定小数位结果的技术咨询
问题分析:TRUNC函数返回整数而非预期小数结果的原因
你遇到的问题核心是整数除法的特性:因为col_a和col_b都是int4(整数类型),数据库里两个整数相除时,会直接执行整数除法——也就是舍去所有小数部分,只保留整数商。所以309/16在计算时先得到了19,再对19执行TRUNC(...,1),结果自然还是19。
要得到预期的19.3,你需要先把其中一个整数字段转换为数值类型,让除法运算先得到带小数的结果,再用TRUNC截断:
TRUNC( col_a::numeric / col_b, 1 )
这样col_a被转为numeric类型后,309::numeric /16会得到19.3125,再TRUNC到1位小数就是19.3。
如果需要保留整数位的小数形式(比如19.0),可以用同样的类型转换后TRUNC到0位,或者直接转换结果类型即可。
内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles
相关产品推荐
相关产品推荐

