[Oracle] ROUND()函数
ROUND() 是Oracle 中常用的数值处理函数,用于对数值进行四舍五入操作
ROUND()函数可以对数值和小数点后指定位数进行精确的四舍五入处理
语法格式
ROUND(number, decimal_places)
参数说明
number:要四舍五入的数字
decimal_places:指定要保留的小数位数(可选)
正数:表示小数位数
负数:表示整数位数
省略:默认为0 (四舍五入到整数)
示例1
-- 四舍五入到整数(默认)
SELECT ROUND(123.456) FROM dual; -- 123
SELECT ROUND(123.556) FROM dual; -- 124-- 保留1位小数
SELECT ROUND(123.4567, 1) FROM dual; -- 123.5-- 保留2位小数
SELECT ROUND(123.4567, 2) FROM dual; -- 123.46-- 结果: 3.33333333333333, 3.33
SELECT 10/3, ROUND(10/3, 2) FROM dual;-- 保留3位小数
SELECT ROUND(123.4567, 3) FROM dual; -- 123.457-- 四舍五入到十位(-1表示十位)
SELECT ROUND(123.456, -1) FROM dual; -- 120-- 四舍五入到百位(-2表示百位)
SELECT ROUND(123.456, -2) FROM dual; -- 100-- 四舍五入到千位
SELECT ROUND(1255, -3) FROM dual; -- 1000
SELECT ROUND(1555, -3) FROM dual; -- 2000
示例2
SELECT ROUND(NULL, 2) FROM dual; -- NULL
提示Tips:ROUND()函数的输入值为NULL,其输出值也为NULL
实际应用场景
-- 计算平均工资并四舍五入到整数
SELECT department_id, ROUND(AVG(salary)) AS avg_salary
FROM employees
GROUP BY department_id;-- 计算产品折扣价格(保留2位小数)
SELECT product_name, price,ROUND(price * 0.9, 2) AS discounted_price
FROM products;-- 报表中的金额格式化
SELECT order_id,ROUND(order_total, 2) AS rounded_total,TO_CHAR(ROUND(order_total, 2), '$999,999.99') AS formatted_total
FROM orders;
补充扩展知识:ROUND()函数也能够进行日期处理
ROUND(date, format)
参数说明
date:要四舍五入的日期
format:指定四舍五入的日期部分(可选)
'YEAR' 或 'YYYY' - 四舍五入到年
'MONTH' 或 'MM' - 四舍五入到月
'DAY' 或 'DD' - 四舍五入到日
'HH24', 'HH12', 'MI' - 四舍五入到小时或分钟
示例
-- 四舍五入到年
-- 如果月份 ≥7 则进到下年,否则保持本年
SELECT ROUND(TO_DATE('2025-08-06', 'YYYY-MM-DD'), 'YEAR') FROM dual; -- 2026/1/1
SELECT ROUND(TO_DATE('2025-06-06', 'YYYY-MM-DD'), 'YEAR') FROM dual; -- 2025/1/1-- 四舍五入到月
-- 如果日期 ≥16 则进到下月,否则保持本月
SELECT ROUND(TO_DATE('2025-08-06', 'YYYY-MM-DD'), 'MONTH') FROM dual; -- 2025/8/1
SELECT ROUND(TO_DATE('2025-08-16', 'YYYY-MM-DD'), 'MONTH') FROM dual; -- 2025/9/1-- 四舍五入到日(默认)
-- 如果时间 ≥12:00 则进到次日,否则保持当日
SELECT ROUND(SYSDATE) FROM dual; -- 2025/8/6
实际应用场景
-- 计算员工入职周年(四舍五入到年)
SELECT employee_id, hire_date,ROUND(hire_date, 'YEAR') AS hire_anniversary
FROM employees;-- 生成季度报告(四舍五入到季度)
SELECT report_id,report_date,ROUND(report_date, 'Q') AS quarter_start
FROM reports;-- 计算月结日(四舍五入到月)
SELECT account_id,transaction_date,ROUND(transaction_date, 'MONTH') AS month_end
FROM transactions;