資料處理中常需對數值進行精度控制:四捨五入、向上取整、向下取整。主流資料庫均提供標準函數,本文匯總Oracle/MySQL/PostgreSQL/SQL Server通用語法與實戰技巧。
| 函數 | 語義 | 行為 | 典型場景 |
|---|---|---|---|
ROUND(n, d) | 四捨五入 | 保留d位小數,d=0為整數,d<0為十位百位捨入 | 金額顯示、報表統計、精度控制 |
CEIL(n) / CEILING(n) | 向上取整(天花板) | 返回≥n的最小整數 | 分頁計算、資源配額向上、最小批次數 |
FLOOR(n) | 向下取整(地板) | 返回≤n的最大整數 | 分頁偏移、索引區間下界、截斷小數 |
若資料庫ROUND不支援第二參數(如舊版MySQL),或需統一跨庫邏輯:
-- 保留1位小數:四捨五入
SELECT ROUND(10.98 * 10) / 10 FROM dual; -- 11.0
-- 保留1位小數:向上取整
SELECT CEIL(10.63 * 10) / 10 FROM dual; -- 10.7
-- 保留1位小數:向下取整
SELECT FLOOR(10.68 * 10) / 10 FROM dual; -- 10.6
原理:乘以10^N → 整數運算 → 除以10^N 還原。
| 函數 | Oracle | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|---|
| 四捨五入 | ROUND | ROUND | ROUND | ROUND |
| 向上取整 | CEIL | CEIL / CEILING | CEIL / CEILING | CEILING |
| 向下取整 | FLOOR | FLOOR | FLOOR | FLOOR |
| 截斷(不四捨五入) | TRUNC | TRUNCATE | TRUNC | TRUNCATE / CAST |
ROUND標準行為多為此法,確認版本文檔DECIMAL(19,4)、NUMERIC,避免浮點誤差CEIL(-1.2) = -1,FLOOR(-1.2) = -2,符合數學定義掌握三大取整函數與乘除法技巧,輕松應對跨資料庫的精度控制需求。