首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 數值函數完整指南:ABS、CEIL、FLOOR、ROUND、TRUNC、MOD、POWER、SQRT 實戰範例

     編輯:Oracle 教學

數值函數分類速查

函數功能語法關鍵行為
ABS絕對值ABS(n)負數轉正,正數不變
CEIL向上取整CEIL(n)≥ n 的最小整數
FLOOR向下取整FLOOR(n)≤ n 的最大整數
ROUND四捨五入ROUND(n [, m])m>0 小數位,m<0 整數位,m 省略=0
TRUNC截斷 (捨去)TRUNC(n [, m])直接切除,不進位
MOD餘數MOD(m, n)m - n*FLOOR(m/n),負數行為注意
POWER冪次POWER(m, n)m 的 n 次方
SQRT平方根SQRT(n)n ≥ 0,負數報錯
SIN/COS/TAN三角函數SIN(n) 等參數為弧度
LN/LOG/EXP對數/指數LN(n), LOG(b,n), EXP(n)自然對數、指數

逐一實戰範例與驗證

1. ABS — 絕對值

SELECT 
  CEIL(3.34) ceil_pos, FLOOR(3.34) floor_pos,
  CEIL(3.99) ceil_pos2, FLOOR(3.99) floor_pos2,
  CEIL(-3.44) ceil_neg, FLOOR(-3.44) floor_neg,
  CEIL(-5.99) ceil_neg2, FLOOR(-5.99) floor_neg2
FROM dual;
-- 結果:
-- CEIL:  4, 4, -3, -5   (向 +∞ 方向)
-- FLOOR: 3, 3, -4, -6   (向 -∞ 方向)

3. ROUND — 四捨五入 (銀行家算法: .5 向偶數)

SELECT 
  TRUNC(785.652)      t0,   -- 785
  TRUNC(785.652, 2)   t2,   -- 785.65
  TRUNC(785.652, -1)  t_1,  -- 780
  TRUNC(785.352)      t0b,  -- 785
  TRUNC(784.652, -1)  t_1b  -- 780
FROM dual;

5. ROUND vs TRUNC 關鍵差異對比

輸入值ROUND(,0)TRUNC(,0)ROUND(,-1)TRUNC(,-1)
785.652786785790780
785.352785785780780
-785.652-786-785-790-780

6. MOD — 餘數運算

SELECT 
  POWER(2, 4)     p1,   -- 16
  POWER(5, 3)     p2,   -- 125
  POWER(9, 0.5)   p3,   -- 3 (等同 SQRT)
  SQRT(16)        s1,   -- 4
  SQRT(2)         s2    -- 1.414...
FROM dual;

8. 實務應用:員工日薪計算 (保留 2 位小數)

-- 移植代碼時必須注意!
SELECT MOD(-10, 3) FROM dual;  -- Oracle: 2
-- Python: -10 % 3  = 2  (同號)
-- C:      -10 % 3  = -1 (同被除數)

2. ROUND 銀行家算法

-- 兩日期相減得數值 (天數,含小數)
SELECT SYSDATE - HIREDATE AS days_diff FROM emp WHERE empno = 7369;

-- 加減天數
SELECT SYSDATE + 30 AS after_30_days FROM dual;

-- 月份運算用 ADD_MONTHS,不可直接加減數值

總結

掌握 ROUND/TRUNC 進位與截斷差異、CEIL/FLOOR 方向性、MOD 負數行為、NUMBER 精度特性,是撰寫正確數值計算 SQL/PLSQL 的基礎。實務中**金融/會計計算嚴禁浮點數**,善用 ROUND(,2) 控制匯率/利率精度,並建立共用函數庫統一處理邊界情況。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved