Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

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

最後更新:2025年3月4日資料庫

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

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

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

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


奇偶數的判斷邏輯

在數學上:

  • 偶數(Even Number) 是指可以被 2 整除的數,即 number % 2 = 0
  • 奇數(Odd Number) 是指無法被 2 整除的數,即 number % 2 = 1

舉例來說:

數字數字 % 2判斷結果
44 % 2 = 0偶數
77 % 2 = 1奇數
1010 % 2 = 0偶數
1515 % 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;

結果:

UserIDName
2Bob
4David
NameBob
NameDavid

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

SELECT * FROM Users WHERE UserID % 2 = 1;

結果:

UserIDName
1Alice
3Charlie
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、SQLitenumber % 2 = 0
MOD() 函數MySQL、Oracle、PostgreSQLMOD(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;

結果:

UserIDNameNumberType
1AliceOdd
2BobEven
3CharlieOdd
4DavidEven
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;

結果:

UserIDNameTeam
1AliceTeam B
2BobTeam A
3CharlieTeam B
4DavidTeam 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 技巧更進一步!🚀

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 奇偶數的判斷邏輯
  • 使用 % 運算符
  • 範例:選取偶數 ID 的用戶
  • 方法 2:使用 MOD() 函數
  • 範例:使用 MOD() 來判斷奇偶數
  • % 和 MOD() 的區別
  • 實際應用場景
  • 分類奇數與偶數 ID
  • 交替分配數據
  • 取前 N 個奇數或偶數
  • 結語