Oracle 中的 TRUNC 函数详解
本文首次创作于 2025-04-15,最后更新于 2025-05-23,距离上次更新已经过了 14 天,文章内容可能已经过时。
Oracle 中的 TRUNC 函数详解
TRUNC 函数是 Oracle 数据库中用于截断数值或日期的函数,它可以将数值截断到指定的小数位,或将日期截断到指定的时间单位。
基本语法
对于数值的截断
TRUNC(number [, decimal_places])
对于日期的截断
TRUNC(date [, format])
参数说明
数值截断参数
日期截断参数
数值截断示例
1. 基本数值截断
SELECT TRUNC(123.4567) FROM dual; -- 结果: 123 (默认截断到整数)
SELECT TRUNC(123.4567, 2) FROM dual; -- 结果: 123.45
SELECT TRUNC(123.4567, -1) FROM dual; -- 结果: 120 (十位截断)
2. 与 ROUND 对比
SELECT TRUNC(123.499), ROUND(123.499) FROM dual; -- 结果: 123 | 123
SELECT TRUNC(123.5), ROUND(123.5) FROM dual; -- 结果: 123 | 124
3. 财务计算应用
SELECT account_id,
balance,
TRUNC(balance * 0.033, 2) AS monthly_interest
FROM accounts;
日期截断示例
1. 基本日期截断
SELECT TRUNC(SYSDATE) FROM dual; -- 结果: 当天00:00:00
SELECT TRUNC(SYSDATE, 'MM') FROM dual; -- 结果: 当月1日
SELECT TRUNC(SYSDATE, 'YYYY') FROM dual; -- 结果: 当年1月1日
2. 常用格式参数
3. 日期范围查询
SELECT *
FROM orders
WHERE order_date BETWEEN TRUNC(SYSDATE, 'MM')
AND LAST_DAY(TRUNC(SYSDATE, 'MM'));
-- 查询本月所有订单
特殊注意事项
NULL 处理:如果输入为 NULL,返回 NULL
与 ROUND 区别:TRUNC 是直接截断,不进行四舍五入
负数处理:对于负数,TRUNC 向零方向截断
SELECT TRUNC(-123.456, 1) FROM dual; -- 结果: -123.4
性能优势:TRUNC 通常比 TO_CHAR/TO_DATE 组合更高效
实际应用场景
财务周期统计:
SELECT TRUNC(transaction_date, 'MM') AS month, SUM(amount) AS total FROM transactions GROUP BY TRUNC(transaction_date, 'MM');
年龄计算:
SELECT employee_name, TRUNC(MONTHS_BETWEEN(SYSDATE, birth_date)/12) AS age FROM employees;
数据分组:
SELECT TRUNC(log_time, 'HH24') AS hour, COUNT(*) AS log_count FROM system_logs GROUP BY TRUNC(log_time, 'HH24');
报表生成:
SELECT product_id, TRUNC(AVG(rating), 1) AS avg_rating FROM product_reviews GROUP BY product_id;
TRUNC 函数在需要精确控制数值精度或日期粒度时非常有用,特别是在财务计算、时间序列分析和数据汇总等场景中。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Noah
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果