從資料表中只選取奇數列或偶數列聽起來像是你永遠都不需要做的事情,除非你自行這樣做。在 Google 快速搜尋一下,可以證實這事情是經常會有人做的,但由於很少有資料庫從業人員知道如何做,他們總是在線上資料庫社群求助尋找答案。作為本文的讀者,你可以省去在資料庫討論區中尋找解決方案的麻煩,因為我們今天就在這裡直接說明如何能做到。
選擇合適的目標欄
在我們談論「偶數列或奇數列」之前,我們必須按我們要拆分資料的欄對列進行排序。理想情況下,其資料應該是數字、而且是唯一的並以遞增順序排序。因此,像主索引鍵這樣的自動遞增欄是完美的選項。否則,你可能需要使用 ORDER BY 子句編寫子査詢,然後從中進行選取。
例如,讓我們在 Navicat Premium 16 的資料表設計器中開啟 classicmodels 範例資料庫的 orders 資料表。我們可以看到其 PK(orderNumber 欄)不是自動遞增的,這可以透過未核取的「自動遞增」核取方塊來證明:
但是,以網格檢視開啟該資料表會顯示 orderNumber 值明顯以遞增順序排序:
因此,我們可以直接針對資料表編寫查詢。
資料庫解決方案
尋找具有奇數或偶數值的記錄的最簡單方法是將欄值除以 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;
此語法將尋找目標欄具有奇數值的列:
SELECT * FROM table_name where column_name % 2 <> 0;
一些範例
讓我們首先在 SQL 中,然後在 SQL Server 中,對 classicmodels 範例資料庫的 orders 資料表嘗試執行上述每個陳述式。
首先,我們將擷取偶數列:
接下來,我們將僅擷取奇數列:
如前所述,SQL Server 沒有 MOD 函式,因此最好使用 % 模數運算子。
偶數列:
奇數列:
總結
本文介紹了一種從各種資料庫中擷取奇數或偶數列的簡單方法,方法是檢查目標欄值除以 2 後的餘數,既簡單又有效。