如何在Databricks SQL中转换小数位数(scale)?
解决方案:调整数值精度与计算结果小数位数
核心问题原因
原字段NUM1为number(38,2),本身仅保留2位小数精度,直接使用round(num1,5)只会在逻辑上补零,但数据库仍会按原字段精度返回结果,导致看不到末尾的零;计算时也会因原精度限制,结果仅保留2位小数。
具体解决方法
1. 直接映射NUM1到NUM2(补零至5位小数)
显式将NUM1转换为number(38,5)类型,强制提升精度:
CAST(NUM1 AS NUMBER(38,5)) AS NUM2
执行后,NUM1=38.25会被转换为38.25000并以number(38,5)类型存储/返回。
如果是用于展示场景,也可以先格式化为带5位小数的字符串,再按需转换:
TO_CHAR(NUM1, '999999999999999999999999999999999999.99999') AS NUM2
2. 计算后保留5位小数
计算前先将NUM1转换为高精度类型,避免原精度限制计算结果:
以平方计算为例:
CAST(POWER(CAST(NUM1 AS NUMBER(38,5)), 2) AS NUMBER(38,5)) AS squared_num
或者结合ROUND确保结果精度:
ROUND(POWER(CAST(NUM1 AS NUMBER(38,5)), 2), 5) AS squared_num
内容的提问来源于stack exchange,提问作者Sabrin Singh
相关产品推荐
相关产品推荐

