Oracle 中的 ROUND 函数详解
Oracle 中的 ROUND 函数详解
ROUND 函数是 Oracle 数据库中用于数值四舍五入的函数,它可以对数字进行指定精度的舍入操作。
基本语法
ROUND(number [, decimal_places])
参数说明
| 参数 | 说明 |
|---|---|
number | 要进行舍入的数值(可以是列、表达式或字面值) |
decimal_places (可选) | 指定保留的小数位数,默认为 0 |
函数特点
- 四舍五入规则:遵循标准的四舍五入规则
- 正负位数:
- 正数表示小数位数
- 负数表示整数部分的舍入位
- 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 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果