您好!欢迎访问家园网-www.jy.wang!

家园网

Oracle 中取模运算的写法

网络 作者:本站 点击:

如果是oracle,这里取模好像得加MOD,讲一讲怎么改:

SELECT 编号,ISBN,BookName,Writer FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ISBN) 编号,ISBN,BookName,Writer
FROM bookinfo_zerobasis) a WHERE a.编号%2=1;

Oracle 中取模运算的写法

您说得对!Oracle 中取模运算不能直接用 % 符号,需要使用 MOD() 函数。


一、Oracle 中的正确写法

sql

SELECT 编号, ISBN, BookName, Writer 
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY ISBN) 编号, ISBN, BookName, Writer    FROM bookinfo_zerobasis) a 
WHERE MOD(a.编号, 2) = 1;


二、各数据库取模写法对比

数据库取模写法示例
MySQL% 运算符a.编号 % 2 = 1
SQL Server% 运算符a.编号 % 2 = 1
PostgreSQL% 运算符a.编号 % 2 = 1
OracleMOD() 函数MOD(a.编号, 2) = 1

三、MOD() 函数详解

语法

sql

MOD(被除数, 除数)

示例

sql

SELECT MOD(5, 2) FROM DUAL;  -- 结果:1(5 ÷ 2 = 2 余 1)SELECT MOD(4, 2) FROM DUAL;  -- 结果:0(4 ÷ 2 = 2 余 0)SELECT MOD(3, 2) FROM DUAL;  -- 结果:1


四、词源角度

函数/符号词源含义
MOD拉丁语 modulus(小度量、尺度)取模、求余数
%拉丁语 per centum(每百)百分号,在编程中被复用为取模运算符

modulus 的同源词:module(模块)、modify(修改)、moderate(适度)


五、Oracle 完整代码示例

sql

-- 查询奇数行SELECT 编号, ISBN, BookName, Writer 
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY ISBN) 编号, ISBN, BookName, Writer    FROM bookinfo_zerobasis) a 
WHERE MOD(a.编号, 2) = 1;   -- 奇数行-- 查询偶数行SELECT 编号, ISBN, BookName, Writer 
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY ISBN) 编号, ISBN, BookName, Writer    FROM bookinfo_zerobasis) a 
WHERE MOD(a.编号, 2) = 0;   -- 偶数行


六、Oracle 中 DUAL 表说明

在 Oracle 中,SELECT 语句必须带 FROM,所以测试函数时需要用到 DUAL 表:

sql

-- OracleSELECT MOD(5, 2) FROM DUAL;  -- 结果:1-- MySQL / SQL Server(可以省略 FROM)SELECT 5 % 2;  -- 结果:1

DUAL 是 Oracle 系统自带的虚拟表,只有一行一列,专门用于测试函数或执行无数据源的查询。


七、总结

数据库奇数行筛选写法
MySQL / SQL Server / PostgreSQLWHERE 编号 % 2 = 1
OracleWHERE MOD(编号, 2) = 1

一句话总结:Oracle 中取模运算需要使用 MOD() 函数,写法为 MOD(编号, 2) = 1 表示筛选奇数行,MOD(编号, 2) = 0 表示筛选偶数行。其他数据库(MySQL、SQL Server、PostgreSQL)可以直接使用 % 运算符


标签: