PL/SQL中的Number类型是Oracle数据库中用于存储数值的数据类型,支持存储整数、浮点数等多种数值形式,与之配套的数字类型函数可以完成各类数值处理操作,满足不同的业务计算需求。

常用Number数字类型函数介绍
取整类函数
取整类函数主要用于去掉数值的小数部分,不同的取整规则对应不同的函数,常用的有以下三种:
- FLOOR函数:返回小于等于输入数值的最大整数,也就是向下取整。
- CEIL函数:返回大于等于输入数值的最小整数,也就是向上取整。
- TRUNC函数:直接截断数值的小数部分,不进行四舍五入,还可以指定截断到小数点后第几位。
下面是这三个函数的使用示例:
DECLARE
v_num NUMBER := 3.67;
BEGIN
-- 向下取整,结果为3
DBMS_OUTPUT.PUT_LINE('FLOOR结果:' || FLOOR(v_num));
-- 向上取整,结果为4
DBMS_OUTPUT.PUT_LINE('CEIL结果:' || CEIL(v_num));
-- 截断到整数部分,结果为3
DBMS_OUTPUT.PUT_LINE('TRUNC不指定小数位结果:' || TRUNC(v_num));
-- 截断到小数点后1位,结果为3.6
DBMS_OUTPUT.PUT_LINE('TRUNC指定小数位结果:' || TRUNC(v_num, 1));
END;
/
四舍五入类函数
ROUND函数用于对数值进行四舍五入处理,可以指定保留的小数位数,规则是如果指定位数后的第一位数字大于等于5则进位,否则直接舍去。
代码示例:
DECLARE
v_num NUMBER := 3.145;
BEGIN
-- 四舍五入到整数位,结果为3
DBMS_OUTPUT.PUT_LINE('ROUND整数位结果:' || ROUND(v_num));
-- 四舍五入到小数点后2位,结果为3.15
DBMS_OUTPUT.PUT_LINE('ROUND小数点后2位结果:' || ROUND(v_num, 2));
-- 四舍五入到小数点后1位,结果为3.1
DBMS_OUTPUT.PUT_LINE('ROUND小数点后1位结果:' || ROUND(v_num, 1));
END;
/
数值计算类函数
这类函数用于完成特定的数值计算,常用的有以下几种:
- ABS函数:返回数值的绝对值,无论输入是正数还是负数,结果都是非负值。
- MOD函数:返回两个数相除的余数,第一个参数是被除数,第二个参数是除数。
- POWER函数:返回第一个参数的第二个参数次幂的结果。
- SQRT函数:返回数值的平方根。
使用示例:
DECLARE
v_num1 NUMBER := -10;
v_num2 NUMBER := 3;
BEGIN
-- 绝对值,结果为10
DBMS_OUTPUT.PUT_LINE('ABS结果:' || ABS(v_num1));
-- 取余,10除以3余1,结果为1
DBMS_OUTPUT.PUT_LINE('MOD结果:' || MOD(ABS(v_num1), v_num2));
-- 3的2次方,结果为9
DBMS_OUTPUT.PUT_LINE('POWER结果:' || POWER(v_num2, 2));
-- 9的平方根,结果为3
DBMS_OUTPUT.PUT_LINE('SQRT结果:' || SQRT(POWER(v_num2, 2)));
END;
/
数值转换类函数
当需要将Number类型转换为其他格式,或者处理特殊数值时,可以使用转换类函数:
- TO_CHAR函数:将Number类型转换为指定格式的字符串,可以自定义小数位、千分位等格式。
- NVL函数:如果第一个参数是NULL,返回第二个参数,否则返回第一个参数,常用于处理可能为空的数值字段。
代码示例:
DECLARE
v_num NUMBER := 12345.678;
v_null_num NUMBER := NULL;
BEGIN
-- 转换为带千分位、保留2位小数的字符串,结果为12,345.68
DBMS_OUTPUT.PUT_LINE('TO_CHAR结果:' || TO_CHAR(v_num, '999,999.99'));
-- 处理空值,结果为0
DBMS_OUTPUT.PUT_LINE('NVL结果:' || NVL(v_null_num, 0));
END;
/
函数使用注意事项
在使用这些Number类型函数时,需要注意以下几点:
- 如果输入参数不是数值类型,部分函数会自动进行隐式转换,但是建议提前确认参数类型,避免转换错误。
- TRUNC和ROUND函数的第二个参数如果是负数,表示对整数部分进行截断或四舍五入,比如ROUND(345, -1)的结果是350。
- MOD函数的除数不能为0,否则会抛出除零错误,使用前需要校验除数是否为0。
实际开发中需要根据业务需求选择合适的函数,比如需要严格舍去小数就用TRUNC,需要符合四舍五入规则就用ROUND,避免混淆导致计算错误。