在 SQL 查詢中,有時我們需要判斷某個數字是奇數還是偶數,這在報表分析、數據分類、甚至是權限管理等場景中都十分常見。
例如,我們可能需要篩選所有奇數 ID 的用戶,或者根據數字的奇偶性來執行不同的邏輯。
SQL 提供了幾種簡單的方法來判斷奇偶數,主要透過 取餘數(Modulo,%) 運算來實現。
本篇文章將介紹 SQL 中如何使用 % 和 MOD() 來進行奇偶數判斷,並探討各種應用場景,讓你能夠輕鬆掌握這項技巧。
奇偶數的判斷邏輯
在數學上:
- 偶數(Even Number) 是指可以被
2整除的數,即number % 2 = 0 - 奇數(Odd Number) 是指無法被
2整除的數,即number % 2 = 1
舉例來說:
| 數字 | 數字 % 2 | 判斷結果 |
|---|---|---|
| 4 | 4 % 2 = 0 | 偶數 |
| 7 | 7 % 2 = 1 | 奇數 |
| 10 | 10 % 2 = 0 | 偶數 |
| 15 | 15 % 2 = 1 | 奇數 |
數字 % 24 % 2 = 0
判斷結果偶數
數字 % 27 % 2 = 1
判斷結果奇數
數字 % 210 % 2 = 0
判斷結果偶數
數字 % 215 % 2 = 1
判斷結果奇數
我們可以在 SQL 中使用 MOD() 或 % 來進行這種判斷。
使用 % 運算符
大多數 SQL 資料庫(如 MySQL、PostgreSQL、SQL Server)都支援 % 運算符,它的功能是計算 數字的餘數。
範例:選取偶數 ID 的用戶
假設我們有一個 Users 表,其中包含 UserID 欄位:
CREATE TABLE Users (
UserID INT PRIMARY KEY,
Name VARCHAR(50)
);
插入一些測試數據:
INSERT INTO Users (UserID, Name) VALUES (1, 'Alice');
INSERT INTO Users (UserID, Name) VALUES (2, 'Bob');
INSERT INTO Users (UserID, Name) VALUES (3, 'Charlie');
INSERT INTO Users (UserID, Name) VALUES (4, 'David');
現在,我們想查詢所有 UserID 為偶數的用戶:
SELECT * FROM Users WHERE UserID % 2 = 0;結果:
| UserID | Name |
|---|---|
| 2 | Bob |
| 4 | David |
NameBob
NameDavid
同理,若要選取所有奇數 ID 的用戶:
SELECT * FROM Users WHERE UserID % 2 = 1;結果:
| UserID | Name |
|---|---|
| 1 | Alice |
| 3 | Charlie |
NameAlice
NameCharlie
方法 2:使用 MOD() 函數
MOD(x, y) 是 SQL 標準函數,可用來計算 x 除以 y 的餘數,類似於 % 運算符。
範例:使用 MOD() 來判斷奇偶數
SELECT * FROM Users WHERE MOD(UserID, 2) = 0; -- 選擇偶數 IDSELECT * FROM Users WHERE MOD(UserID, 2) = 1; -- 選擇奇數 ID這兩個查詢的效果與 % 運算符相同。
% 和 MOD() 的區別
| 運算方式 | 支援的 SQL 資料庫 | 用法示例 |
|---|---|---|
% 運算符 | MySQL、PostgreSQL、SQL Server、SQLite | number % 2 = 0 |
MOD() 函數 | MySQL、Oracle、PostgreSQL | MOD(number, 2) = 0 |
支援的 SQL 資料庫MySQL、PostgreSQL、SQL Server、SQLite
用法示例number % 2 = 0
支援的 SQL 資料庫MySQL、Oracle、PostgreSQL
用法示例MOD(number, 2) = 0
如果你的資料庫支援 %,那它通常是更直覺的選擇;但如果你使用 Oracle(它不支援 %),則 MOD() 會是唯一的選擇。
實際應用場景
分類奇數與偶數 ID
如果我們想將奇數 ID 和偶數 ID 分成兩類,可以這樣做:
SELECT UserID, Name,
CASE
WHEN UserID % 2 = 0 THEN 'Even'
ELSE 'Odd'
END AS NumberType
FROM Users;
結果:
| UserID | Name | NumberType |
|---|---|---|
| 1 | Alice | Odd |
| 2 | Bob | Even |
| 3 | Charlie | Odd |
| 4 | David | Even |
NameAlice
NumberTypeOdd
NameBob
NumberTypeEven
NameCharlie
NumberTypeOdd
NameDavid
NumberTypeEven
交替分配數據
如果你想將資料庫中的數據交替分配,例如:
- 偶數 ID 的用戶分配到 Team A
- 奇數 ID 的用戶分配到 Team B
可以使用:
SELECT UserID, Name,
CASE
WHEN UserID % 2 = 0 THEN 'Team A'
ELSE 'Team B'
END AS Team
FROM Users;
結果:
| UserID | Name | Team |
|---|---|---|
| 1 | Alice | Team B |
| 2 | Bob | Team A |
| 3 | Charlie | Team B |
| 4 | David | Team A |
NameAlice
TeamTeam B
NameBob
TeamTeam A
NameCharlie
TeamTeam B
NameDavid
TeamTeam A
取前 N 個奇數或偶數
如果你需要選取前 5 個偶數 ID 的用戶:
SELECT * FROM Users WHERE UserID % 2 = 0 LIMIT 5;或選取前 5 個奇數 ID:
SELECT * FROM Users WHERE UserID % 2 = 1 LIMIT 5;結語
在 SQL 中,使用 % 或 MOD() 都可以輕鬆判斷奇偶數,這在數據分類、分組、甚至是交替分配數據時都非常有用。一般來說:
- 若資料庫支援
%,可直接使用number % 2 = 0或number % 2 = 1 - 若使用 Oracle,則需用
MOD(number, 2) = 0或MOD(number, 2) = 1 CASE WHEN搭配奇偶數判斷,可以用來分類數據
希望這篇文章能幫助你理解 SQL 判斷奇偶數的方法,讓你的 SQL 技巧更進一步!🚀