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_idweight_kgshipping_fee
13.2100
27.5200
312.1300

計算租賃天數

租車按天計費,不足一天按一天計算:

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()