首批通过分布式安全可靠测评,为关键业务系统打造
数字计算操作
更新时间:2026-04-14 17:41:09
本文假设数据库中存在表 t1,且 t1 表的 c1 和 c2 列均为 number 类型,结合示例介绍 ODP 中数字计算操作相关函数的使用方法。
说明
本文给出的为数字计算函数的推荐用法,建议您按照本文中的用法进行使用。
本文示例均是假设数据库中存在表
t1,并且t1表中c1列为分区键。
MOD
MOD 函数的作用是返回两个数相除后的余数,支持 mod(y,x) 用法,即返回 y/x 后的余数。
从表 t1 中选取所有 c1 列值与 mod(5,2),也就是 1 相等的行,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=mod(5,2);
NVL
NVL 函数可用于处理 NULL 值,支持 nvl(expr1,expr2) 用法,即如果 expr1 为 NULL,则返回 expr2 的值,否则返回 expr1 的值。
从 t1 表中选取 c1 列值与字符串 aaa 相等的行,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=nvl('aaa',0);
在处理 NULL 值时,更推荐如下写法:
select * from t1 where c1 is null
# 或
select * from t1 where c2 is not null
ISNULL
ISNULL 函数的作用是判断参数是否为空,支持 isnull(expr) 用法。
从 t1 表中选取 c1 列值与 isnull(mod(5,2)) 相等的行,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=isnull(mod(5,2));
ABS
ABS 函数的作用是返回其参数的绝对值,支持 abs(number) 用法。
注意
仅支持参数为数字类型,ODP 遇到不能转换为 number 类型的数据会计算错误,输出为 0。
此处以查询 t1 表中 c1 列值与 abs(-100),也就是 100 相等的行为例,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=abs(-100);
CEIL/CEILING
CEIL 和 CEILING 函数的作用均是返回大于或等于其参数的最小整数,此处以 CEIL 函数为例进行介绍。
CEIL 函数支持 ceil(number) 用法,此处以查询 t1 表中 c1 列值与 ceil(-7.2),也就是 -7 相等的行为例,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=ceil(-7.2);
FLOOR
FLOOR 函数的作用是返回小于或等于其参数的最大整数,支持 floor(number) 用法,此处以查询 t1 表中 c1 列值与 floor(-7.2),也就是 -8 相等的行为例,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=floor(-7.2);
TRUNCATE(MySQL)/TRUNC(Oracle)
TRUNCATE 和 TRUNC 函数分别对应 MySQL 模式和 Oracle 模式,其作用均是对数字进行截断处理(不进行四舍五入)。分别支持如下用法:
truncate(number,d)
number:待截断的数值
d:需要保留的小数位数,正数表示小数点后的位数,负数则表示小数点前的位数
trunc(number,[scale])
number:待截断的数值
scale:可选值,用于设置需要保留的小数位数,正数表示小数点后的位数,负数则表示小数点前的位数
此处以 TRUNCATE 函数为例介绍如何使用,若您想要查询 t1 表中 c1 列值与 truncate(34.1278,3),也就是 34.127 相等的行,可执行如下命令:
select * from t1 where c1=truncate(34.1278,3);
ROUND
ROUND 函数的作用是对数字进行四舍五入操作,根据租户的模式不同分为以下两种用法:
MySQL 模式:round(number,d)
number:待四舍五入的数值
d:需要保留的小数位数,正数表示小数点后的位数,负数则表示小数点前的位数
Oracle 模式:round(number,[scale])
number:待四舍五入的数值
scale:可选值,用于设置需要保留的小数位数,正数表示小数点后的位数,负数则表示小数点前的位数
此处以 MySQL 模式为例介绍如何使用,若您想要查询 t1 表中 c1 列值与 round(123.123, 1),也就是 123.1 相等的行,可执行如下命令:
select * from t1 where c1=round(123.123,1);