Snowflake中如何去除NUMBER类型字段小数点后末尾的零
NUMBER(38,12)类型本身存储时没有“末尾零”的属性,你看到的末尾零是数值转字符串展示时,数据库按定义的12位小数精度补位得到的,要实现需求可以按使用场景选以下两种方案:
方案1:输出为字符串(完全匹配展示要求)
这个方案适合直接输出给前端展示、导出文件的场景,不会改变原始数值的精度,不同数据库的实现如下:
- Oracle:
说明:SELECT RTRIM(RTRIM(TO_CHAR(你的字段名, 'FM9999999999999999999999999999.999999999999'), '0'), '.') FROM 你的表名;FM前缀会去掉数值转字符串时的前导空格,内层RTRIM先删去末尾的0,外层RTRIM处理类似12.0000这类场景,避免处理后留下多余的小数点。 - PostgreSQL:
SELECT TO_CHAR(你的字段名, 'FM9999999999999999999999999999.999999999999') FROM 你的表名; - MySQL:
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM 你的字段名)) FROM 你的表名;
方案2:输出仍为数值类型
如果后续还要对字段做数值计算,不需要转字符串,可以直接转成浮点类型,数据库会自动移除冗余的小数位:
-- 绝大多数数据库都支持的通用写法 SELECT CAST(你的字段名 AS DOUBLE PRECISION) FROM 你的表名;
注意:如果你的数值精度要求超过了浮点数的精度上限,不要用这个方案,避免精度丢失,优先选字符串处理方案。
用你给出的示例值测试,两种方案都可以得到符合要求的结果:
0.978219150000 -> 0.97821915 0.650502591918 -> 0.650502591918 0.975479450000 -> 0.97547945
内容的提问来源于stack exchange,提问作者VarYaz
相关产品推荐
相关产品推荐

