Oracle 內建數百函數,本文精選開發最常用的單列函數(字元、數學、日期、轉換、通用)與群組函數,附語法、範例與實戰提示,供查閱與背誦。
| 函數 | 功能 | 範例 | 結果 |
|---|---|---|---|
| LPAD(c1, n, c2) | 左填充 c2 至長度 n | LPAD('Hi', 5, '*') | ***Hi |
| RPAD(c1, n, c2) | 右填充 | RPAD('Hi', 5, '*') | Hi*** |
| LOWER/UPPER/INITCAP | 轉小寫/大寫/首字母大寫 | INITCAP('hello world') | Hello World |
| LENGTH(c1) | 字串長度(字元數) | LENGTH('你好') | 2 |
| SUBSTR(c1, pos, len) | 擷取子字串(pos 可負,從右算) | SUBSTR('Hello', -3, 2) | ll |
| INSTR(c1, c2, pos, nth) | 搜尋 c2 在 c1 第 nth 次出現位置 | INSTR('Mississippi', 'i', 1, 3) | 8 |
| LTRIM/RTRIM(c1, set) | 移除左/右側出現在 set 的字元 | LTRIM('Miss', 'M') | iss |
| REPLACE(c1, old, new) | 替換所有 old 為 new | REPLACE('abc', 'a', 'X') | Xbc |
| TRANSLATE(c1, from, to) | 逐字元對應替換 | TRANSLATE('abc', 'ab', '12') | 12c |
| 函數 | 功能 | 範例 | 結果 |
|---|---|---|---|
| ABS(n) | 絕對值 | ABS(-5) | 5 |
| ROUND(n, p) | 四捨五入至 p 位小數(p 可負) | ROUND(123.456, -2) | 100 |
| TRUNC(n, p) | 捨去至 p 位(不四捨五入) | TRUNC(123.456, 2) | 123.45 |
| CEIL/FLOOR(n) | 向上/向下取整 | CEIL(5.1) / FLOOR(-2.3) | 6 / -3 |
| MOD(m, n) | 餘數 | MOD(10, 3) | 1 |
| POWER(m, n) | m 的 n 次方 | POWER(2, 10) | 1024 |
| SQRT(n) | 平方根 | SQRT(16) | 4 |
| SIGN(n) | 正負號 | SIGN(-5) | -1 |
| 函數 | 功能 | 範例 |
|---|---|---|
| SYSDATE | 當前日期時間 | SELECT SYSDATE FROM dual; |
| ADD_MONTHS(d, n) | 加減月份 | ADD_MONTHS(SYSDATE, -3) |
| LAST_DAY(d) | 該月最後一天 | LAST_DAY(SYSDATE) |
| MONTHS_BETWEEN(d1, d2) | 月份差(含小數) | MONTHS_BETWEEN('2024-12-31', '2024-01-01') |
| NEXT_DAY(d, '星期') | d 之後第一個指定星期 | NEXT_DAY(SYSDATE, 'FRIDAY') |
| NEW_TIME(d, tz1, tz2) | 時區轉換(舊函數,建議用 TZ_OFFSET) | NEW_TIME(SYSDATE, 'GMT', 'EST') |
| ROUND/TRUNC(date, fmt) | 日期四捨五入/截斷至 fmt 單位 | ROUND(SYSDATE, 'MONTH') |
| 函數 | 功能 | 常用格式元素 |
|---|---|---|
| TO_CHAR(date/num, fmt) | 轉字串 | YYYY-MM-DD, HH24:MI:SS, 999G999D99 |
| TO_NUMBER(char, fmt) | 轉數字 | 999D99, FM999.99 |
| TO_DATE(char, fmt) | 轉日期 | YYYY-MM-DD, DD-MON-RR |
| CAST(expr AS type) | ANSI 標準轉型 | CAST('123' AS NUMBER) |
| 函數 | 功能 | 範例 |
|---|---|---|
| DECODE(expr, s1, r1, s2, r2, ..., def) | 等值比較多重分支(類似 switch) | DECODE(grade, 'A', '優', 'B', '良', '可') |
| CASE WHEN cond THEN res ... ELSE def END | 任意條件分支(功能更強) | CASE WHEN sal>5000 THEN '高' ELSE '普' END |
| NVL(expr1, expr2) | expr1 為 NULL 回傳 expr2 | NVL(comm, 0) |
| NVL2(expr1, expr2, expr3) | expr1 不為 NULL 回傳 expr2,否則 expr3 | NVL2(comm, '有', '無') |
| COALESCE(e1, e2, ...) | 回傳第一個非 NULL 參數 | COALESCE(comm, bonus, 0) |
| NULLIF(e1, e2) | e1=e2 回傳 NULL,否則 e1 | NULLIF(len, 0) |
| 函數 | 功能 | 備註 |
|---|---|---|
| AVG([DISTINCT|ALL] expr) | 平均值 | 忽略 NULL |
| COUNT(*) / COUNT(expr) | 行數 / 非 NULL 個數 | COUNT(*) 最快 |
| MAX/MIN([DISTINCT|ALL] expr) | 最大/最小值 | |
| SUM(expr) | 加總 | |
| STDDEV / VARIANCE | 標準差 / 變異數 | 統計分析用 |
| LISTAGG(expr, delim) WITHIN GROUP (ORDER BY ...) | 字串聚合(11gR2+) | GROUP_CONCAT 替代 |
| MEDIAN / PERCENTILE_CONT / PERCENTILE_DISC | 中位數 / 百分位數 | 進階統計 |
DECODE 只能做等值比較,區間判斷請用 CASE。NVL 兩參數型別需一致或可隱式轉換,否則報錯。COUNT(*) 計算所有列。PARALLEL 提升效能。