CEIL() / CEILING() 函數 (SQL CEIL() / CEILING() Function)
CEIL() 和 CEILING() 函數用於將數值無條件進位,返回大於或等於指定數值的最小整數。這也稱為「向上取整」或「天花板函數」。
各資料庫支援
| 資料庫 | CEIL() | CEILING() |
|---|---|---|
| MySQL | ✓ | ✓ |
| PostgreSQL | ✓ | ✓ |
| Oracle | ✓ | ✗ |
| SQL Server | ✗ | ✓ |
| SQLite | ✗ | ✗ (使用自訂函數) |
CEIL() / CEILING() 語法 (Syntax)
CEIL(number)
-- 或
CEILING(number)
- number:要進行無條件進位的數值。
CEIL() / CEILING() 函數用法範例 (Example)
基本範例
SELECT CEIL(2.1); -- 結果:3
SELECT CEIL(2.9); -- 結果:3
SELECT CEIL(2.0); -- 結果:2(已是整數,不變)
SELECT CEIL(-2.1); -- 結果:-2(向 0 的方向進位)
SELECT CEIL(-2.9); -- 結果:-2
對於負數,CEIL() 會返回更接近 0 的整數(即「較大」的整數)。
計算所需頁數
假設有一個分頁功能,每頁顯示 10 筆記錄,共有 95 筆記錄:
SELECT CEIL(95.0 / 10) AS total_pages;
-- 結果:10(需要 10 頁才能顯示所有記錄)
SELECT CEIL(100.0 / 10) AS total_pages;
-- 結果:10(剛好 10 頁)
SELECT CEIL(101.0 / 10) AS total_pages;
-- 結果:11(需要 11 頁)
⚠️ 注意:如果兩個運算元都是整數,整數除法會先執行。使用
95.0而非95可以確保得到小數結果。
計算運費
假設運費規則是:每 5 公斤 100 元,不足 5 公斤也以 5 公斤計算:
SELECT
package_id,
weight_kg,
CEIL(weight_kg / 5.0) * 100 AS shipping_fee
FROM
packages;
| package_id | weight_kg | shipping_fee |
|---|---|---|
| 1 | 3.2 | 100 |
| 2 | 7.5 | 200 |
| 3 | 12.1 | 300 |
計算租賃天數
租車按天計費,不足一天按一天計算:
SELECT
rental_id,
start_datetime,
end_datetime,
CEIL(TIMESTAMPDIFF(HOUR, start_datetime, end_datetime) / 24.0) AS rental_days
FROM
car_rentals;
CEIL() 與 FLOOR() 的對比
| 函數 | 功能 | CEIL(2.3) | CEIL(-2.3) | FLOOR(2.3) | FLOOR(-2.3) |
|---|---|---|---|---|---|
| CEIL() | 無條件進位 | 3 | -2 | - | - |
| FLOOR() | 無條件捨去 | - | - | 2 | -3 |
注意事項
CEIL(NULL)的結果是NULL。- 對於負數的行為可能與直覺不同,記住它總是返回「較大」的整數。
- 在 SQL Server 中,請使用
CEILING()而非CEIL()。