SQL 判斷奇偶數:% 與 MOD() 的應用

Published February 25, 2025 by 徐培鈞
資料庫

在 SQL 查詢中,有時我們需要判斷某個數字是奇數還是偶數,這在報表分析、數據分類、甚至是權限管理等場景中都十分常見。

例如,我們可能需要篩選所有奇數 ID 的用戶,或者根據數字的奇偶性來執行不同的邏輯。

SQL 提供了幾種簡單的方法來判斷奇偶數,主要透過 取餘數(Modulo,%) 運算來實現。

本篇文章將介紹 SQL 中如何使用 %MOD() 來進行奇偶數判斷,並探討各種應用場景,讓你能夠輕鬆掌握這項技巧。


奇偶數的判斷邏輯

在數學上:

  • 偶數(Even Number) 是指可以被 2 整除的數,即 number % 2 = 0
  • 奇數(Odd Number) 是指無法被 2 整除的數,即 number % 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;

結果:

NameBob
NameDavid

同理,若要選取所有奇數 ID 的用戶

SELECT * FROM Users WHERE UserID % 2 = 1;

結果:

NameAlice
NameCharlie

方法 2:使用 MOD() 函數

MOD(x, y) 是 SQL 標準函數,可用來計算 x 除以 y 的餘數,類似於 % 運算符。

範例:使用 MOD() 來判斷奇偶數

SELECT * FROM Users WHERE MOD(UserID, 2) = 0; -- 選擇偶數 ID
SELECT * FROM Users WHERE MOD(UserID, 2) = 1; -- 選擇奇數 ID

這兩個查詢的效果與 % 運算符相同。


%MOD() 的區別

支援的 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;

結果:

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;

結果:

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 = 0number % 2 = 1
  • 若使用 Oracle,則需用 MOD(number, 2) = 0MOD(number, 2) = 1
  • CASE WHEN 搭配奇偶數判斷,可以用來分類數據

希望這篇文章能幫助你理解 SQL 判斷奇偶數的方法,讓你的 SQL 技巧更進一步!🚀