Navicat 博客

从表中选择奇数或偶数行 2022 年 7 月 8 日,由 Robert Gravelle 撰写

从表中仅选择奇数行或偶数行听起来像是你永远不必做的事情,除非你自行这样做。在谷歌快速搜索一下,可以证实这事情是经常有人会做的,但是,很少有数据库从业者知道如何做,他们总是在线数据库社区求助寻找答案。作为本文的读者,你可以省去在数据库论坛中寻找解决方案的麻烦,因为我们今天将在这里直接说明如何能做到。

选择合适的目标列

在我们谈论“偶数行或奇数行”之前,我们必须按我们要拆分数据的列对行进行排序。理想情况下,它的数据应该是数字、而且是唯一的并按升序排序。因此,像主键这样的自增列是完美的选项。否则,你可能需要使用 ORDER BY 子句编写子查询,然后从中进行选择。

例如,让我们在 Navicat Premium 16 的表设计器中打开 classicmodels 示例数据库的 orders 表。我们可以看到它的 PK(orderNumber 列)不是自动递增的,未选中的“自动递增”复选框就是证明:

orders_table_design (17K)

但是,以网格视图打开表会显示 orderNumber 值按升序排列:

orders_table (212K)

因此,我们可以直接针对表编写查询。

数据库解决方案

查找具有奇数或偶数值的记录的最简单方法是将列值除以 2 并检查余数。余数 0 表示偶数,而余数是奇数则表示奇数。但是,就像许多数据库任务一样,如何计算余数取决于你使用的数据库类型。

在 PostgreSQL、MySQL 和 Oracle 中,我们可以使用 MOD() 函数来检查余数:

以下是查找指定列具有偶数值的行的一般查询语法:

SELECT * 
FROM table_name 
WHERE mod(column_name,2) = 0;

此语法将查找目标列具有奇数值的行:

SELECT * 
FROM table_name 
WHERE mod(column_name,2) <> 0;

SQL Server 没有 MOD 函数。反而,它提供了 % 取模运算符。

以下是查找指定列具有偶数值的行的一般查询语法:

SELECT *
FROM table_name 
where column_name % 2 = 0;

This syntax will find rows where our target column has odd values:

SELECT *
FROM table_name 
where column_name % 2 <> 0;

一些例子

让我们首先在 SQL 中,然后在 SQL Server 中,针对 classicmodels 示例数据库的 orders 表尝试运行上述每个语句。

首先,我们将检索偶数行:

even_rows_in_mysql (170K)

接下来,我们将只获取奇数行:

odd_rows_in_mysql (204K)

如前所述,SQL Server 没有 MOD 函数,因此最好使用 % 取模运算符。

偶数行:

even_rows_in_sql_server (215K)

奇数行:

odd_rows_in_sql_server (211K)

总结

本文提供了一种从各种数据库中检索奇数或偶数行的简单方法,方法是检查目标列值除以 2 后的余数,既简单又有效。

Navicat 文章
频道条目
分享
文章归档