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

Databricks如何不四舍五入截断小数 解决truncate函数未定义报错

Databricks数值小数位不四舍五入截断解决方案

报错原因

Databricks SQL 中的truncate函数不支持数值类型的小数截断操作,它仅用于两种场景:

  • 清空表数据:TRUNCATE TABLE 表名
  • 日期时间类型截断:配合date_trunc函数实现日期按年/月/日等维度截断
    直接调用truncate(数值, 小数位)会触发函数未定义的报错。

实现方法

方法1:floor结合乘除运算(通用方案,全版本支持)

通过放大N倍后取整再缩小N倍的逻辑实现截断,语法如下:

-- 保留2位小数截断示例
SELECT floor(12.455555 * 100) / 100 AS truncated_value;

返回结果为12.45,完全无四舍五入。
如果需要兼容负数场景(截断后向0靠近,而非向下取整),可以优化写法:

-- 负数兼容示例,保留2位小数
SELECT sign(-12.455555) * floor(abs(-12.455555) * 100) / 100 AS truncated_value;

返回结果为-12.45,符合常规截断需求。
如果需要动态调整保留的小数位,可以替换固定的100为pow(10, 保留位数):

-- 动态保留3位小数示例
SELECT floor(12.455555 * pow(10, 3)) / pow(10, 3) AS truncated_value;

方法2:字符串正则匹配(特殊场景使用)

如果是非数值计算的展示场景,也可以转字符串后截取,性能略低于数值运算:

SELECT regexp_extract(CAST(12.455555 AS STRING), '^\\d+\\.\\d{2}', 0) AS truncated_value;

返回结果为字符串类型的12.45,需要数值类型可以再套一层CAST转数值。

方法3:官方trunc函数(高版本支持)

如果你使用的是Databricks Runtime 13.0及以上版本,可以直接调用原生数值截断函数trunc:

SELECT trunc(12.455555, 2) AS truncated_value;

直接返回12.45,无需自行实现逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:18:00