整理 Oracle 最常用的內建函數分類速查表,附格式模式與實際範例,適合開發與 DBA 隨時查閱。
| 函數 | 說明 | 範例 |
|---|---|---|
| ABS(n) | 絕對值 | ABS(-15) = 15 |
| MOD(m,n) | 餘數 | MOD(10,3) = 1 |
| POWER(m,n) | m 的 n 次方 | POWER(2,3) = 8 |
| ROUND(m[,n]) | 四捨五入至 n 位小數(預設 0) | ROUND(1.567,2) = 1.57 |
| TRUNC(m[,n]) | 截斷至 n 位小數(預設 0) | TRUNC(1.567,2) = 1.56 |
| 函數 | 說明 | 範例 |
|---|---|---|
| INITCAP(s) | 每單字首字母大寫 | INITCAP('hello world') = 'Hello World' |
| LOWER(s) / UPPER(s) | 全小寫 / 全大寫 | UPPER('abc') = 'ABC' |
| CONCAT(s1,s2) 或 s1 || s2 | 串聯 | 'AB' || 'CD' = 'ABCD' |
| LPAD(s,n[,pad]) | 左填充至長度 n | LPAD('9',3,'0') = '009' |
| RPAD(s,n[,pad]) | 右填充至長度 n | RPAD('9',3,'*') = '9**' |
| LTRIM(s[,set]) / RTRIM(s[,set]) | 移除左/右側指定字元(預設空格) | RTRIM('abc. ','. ') = 'abc' |
| REPLACE(s, search[,replace]) | 替換/移除子字串 | REPLACE('abc','a','X') = 'Xbc' |
| SUBSTR(s, pos[,len]) | 擷取子字串(位置從 1 起) | SUBSTR('abcdef',3,2) = 'cd' |
| LENGTH(s) | 字元長度 | LENGTH('中文') = 2 |
| INSTR(s1,s2[,pos[,occur]]) | 搜尋 s2 在 s1 第 pos 位置後第 occur 次出現的位置 | INSTR('ababa','a',1,2) = 3 |
| 函數 | 說明 | 範例 |
|---|---|---|
| NVL(expr1, expr2) | expr1 為 NULL 回傳 expr2 | NVL(comm,0) |
| TO_CHAR(n|d [,fmt]) | 數值/日期轉字串 | TO_CHAR(12345,'$99,999') = '$12,345' |
| TO_NUMBER(s [,fmt]) | 字串轉數值 | TO_NUMBER('$12,345','$99,999') = 12345 |
| TO_DATE(s [,fmt]) | 字串轉日期 | TO_DATE('2024-01-15','YYYY-MM-DD') |
| 元素 | 說明 |
|---|---|
| 9 | 數字位(前導空格) |
| 0 | 前導零 |
| $ | 美元符號 |
| L | 本地貨幣符號 |
| . | 小數點 |
| , | 千分位分隔 |
| 函數 | 說明 |
|---|---|
| AVG([DISTINCT|ALL] expr) | 平均值 |
| COUNT(*) / COUNT(expr) | 列數 / 非 NULL 個數 |
| MAX / MIN | 最大/最小值 |
| SUM | 總和 |
| STDDEV / VARIANCE | 標準差 / 變異數 |
| 函數 | 說明 | 範例 |
|---|---|---|
| ADD_MONTHS(d, n) | 日期加 n 月 | ADD_MONTHS(SYSDATE,3) |
| LAST_DAY(d) | 該月最後一天 | LAST_DAY(SYSDATE) |
| MONTHS_BETWEEN(d1,d2) | 兩日期月份差 | MONTHS_BETWEEN(d1,d2) |
| NEXT_DAY(d, '星期') | d 之後指定星期的日期 | NEXT_DAY(SYSDATE,'FRIDAY') |
| SYSDATE / SYSTIMESTAMP | 當前日期/時間戳 | |
| ROUND(d[,fmt]) / TRUNC(d[,fmt]) | 日期四捨五入/截斷 | TRUNC(SYSDATE,'MM') = 本月 1 號 |
| 模式 | 意義 | 範例 |
|---|---|---|
| YYYY / YY | 4/2 位年 | 2024 / 24 |
| MM / MON / MONTH | 月份數字/縮寫/全名 | 01 / JAN / JANUARY |
| DD / DY / DAY | 日期/星期縮寫/全名 | 15 / MON / MONDAY |
| HH24 / HH12 | 24/12 小時制 | 14 / 02 |
| MI / SS | 分 / 秒 | 30 / 59 |
| AM / PM | 上午/下午標記 | PM |
| FM | 前綴:抑制前導零/空格 | FMMONTH → 'JANUARY' |
| TH / SP | 序數/拼寫後綴 | DDTH → '15TH' |
-- 金額格式化
SELECT TO_CHAR(salary, 'L999,999.00') FROM employees;
-- 計算年齡
SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, birth_date)/12) AS age FROM employees;
-- 本月第一天 00:00:00
SELECT TRUNC(SYSDATE, 'MM') FROM dual;
-- 移除字串前後空格
SELECT TRIM(' hello ') FROM dual; -- 10g+ 支援 TRIM