Oracle 中的 ROUND 函数详解
本文首次创作于 2025-04-11,最后更新于 2025-05-23,距离上次更新已经过了 13 天,文章内容可能已经过时。
Oracle 中的 ROUND 函数详解
ROUND 函数是 Oracle 数据库中用于数值四舍五入的函数,它可以对数字进行指定精度的舍入操作。
基本语法
ROUND(number [, decimal_places])
参数说明
函数特点
四舍五入规则:遵循标准的四舍五入规则
正负位数:
正数表示小数位数
负数表示整数部分的舍入位
NULL 处理:如果输入为 NULL,返回 NULL
日期支持:也可用于日期类型的舍入
使用示例
1. 基本数值舍入
SELECT ROUND(123.4567) FROM dual; -- 结果: 123 (默认舍入到整数)
SELECT ROUND(123.4567, 2) FROM dual; -- 结果: 123.46
SELECT ROUND(123.4567, -1) FROM dual; -- 结果: 120 (十位舍入)
2. 边界情况
SELECT ROUND(123.5) FROM dual; -- 结果: 124
SELECT ROUND(124.5) FROM dual; -- 结果: 125
SELECT ROUND(125.5) FROM dual; -- 结果: 126
3. 与表列结合使用
SELECT product_name,
price,
ROUND(price * 0.9, 2) AS discount_price
FROM products;
4. 日期舍入
SELECT ROUND(SYSDATE, 'YYYY') FROM dual; -- 舍入到年
SELECT ROUND(SYSDATE, 'MM') FROM dual; -- 舍入到月
SELECT ROUND(SYSDATE, 'DD') FROM dual; -- 舍入到天
特殊注意事项
银行家舍入:Oracle 的 ROUND 使用"四舍六入五成双"规则
当舍入位=5时,前一位是偶数则舍,奇数则入
SELECT ROUND(125.5) FROM dual; -- 结果: 126 (5前是奇数5,进位) SELECT ROUND(124.5) FROM dual; -- 结果: 124 (5前是偶数4,舍去)
与 TRUNC 对比:
SELECT ROUND(123.456, 2), TRUNC(123.456, 2) FROM dual; -- 结果: 123.46 | 123.45
格式化输出:
SELECT TO_CHAR(ROUND(123.4567, 2), '9999.99') FROM dual; -- 结果: ' 123.46'
实际应用场景
财务计算:
SELECT invoice_id, amount, ROUND(amount * tax_rate, 2) AS tax_amount FROM invoices;
报表统计:
SELECT department_id, ROUND(AVG(salary), 0) AS avg_salary FROM employees GROUP BY department_id;
价格处理:
UPDATE products SET price = ROUND(price * 1.05, 2); -- 涨价5%并保留两位小数
日期分组:
SELECT ROUND(log_time, 'HH24'), COUNT(*) FROM system_logs GROUP BY ROUND(log_time, 'HH24');
单位转换:
SELECT ROUND(kilometers * 0.621371, 1) AS miles FROM distances;
性能提示
在大量数据计算时,先过滤再应用 ROUND 更高效
在索引列上使用 ROUND 会导致索引失效
对于固定小数位需求,考虑使用 NUMBER(p,s) 类型定义列
ROUND 函数是数值处理中最常用的函数之一,特别适合财务、统计和科学计算等需要精确控制的场景。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Noah
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果