| 函數 | 說明 | 範例 |
| ASCII(c) | 回傳第一字元 ASCII 碼 | ASCII('A') → 65 |
| CHR(n) | ASCII 反函數 | CHR(65) → 'A' |
| CONCAT(c1,c2) | 字串連接 (同 ||) | CONCAT('A','B') → 'AB' |
| INITCAP(c) | 每字首大寫 | INITCAP('hello world') → 'Hello World' |
| INSTR(c1,c2[,pos[,occur]]) | 搜尋子字串位置 | INSTR('Mississippi','i',3,3) → 11 |
| LENGTH(c) | 字串長度 | LENGTH('Oracle') → 6 |
| LOWER/UPPER(c) | 大小寫轉換 | UPPER('oracle') → 'ORACLE' |
| LPAD/RPAD(c1,n[,c2]) | 左/右填充至長度 n | LPAD('5',3,'0') → '005' |
| LTRIM/RTRIM/TRIM(c1[,c2]) | 移除首/尾/兩側字元 | TRIM(' abc ') → 'abc' |
| REPLACE(c1,c2[,c3]) | 取代字串 | REPLACE('Jack','J','B') → 'Back' |
| SUBSTR(c,pos[,len]) | 擷取子字串 | SUBSTR('Oracle',1,3) → 'Ora' |
| SOUNDEX(c) | 發音相似編碼 | SOUNDEX('Smith') = SOUNDEX('Smythe') |
| TRANSLATE(c,from,to) | 字元對應取代 | TRANSLATE('123','12','AB') → 'AB3' |
| 函數 | 說明 |
| AVG([DISTINCT|ALL] expr) | 平均值 |
| COUNT({*|DISTINCT|ALL} expr) | 筆數 |
| MAX/MIN([DISTINCT|ALL] expr) | 最大/最小值 |
| SUM([DISTINCT|ALL] expr) | 總和 |
| STDDEV/VARIANCE([DISTINCT|ALL] expr) | 標準差/變異數 |
群組函數忽略 NULL 值 (COUNT(*) 除外)。DISTINCT/ALL 對 MAX/MIN 無影響。
GROUP BY / HAVING 進階用法
-- 分組統計
SELECT state, COUNT(*) zip_count FROM zip_codes GROUP BY state;
-- 結合排序
SELECT state, COUNT(*) FROM zip_codes GROUP BY state ORDER BY COUNT(*) DESC;
-- HAVING 過濾群組 (不可用 WHERE)
SELECT sales_clerk, SUM(sale_amount)
FROM gross_sales
WHERE sales_dept = 'OUTSIDE'
GROUP BY sales_clerk
HAVING SUM(sale_amount) > 10000;
函數嵌套與優先順序
由內而外、由左而右執行。常用於 DECODE/CASE 邏輯判斷。例如:
SELECT UPPER(SUBSTR(ename,1,3)) FROM emp; -- 取前三字並轉大寫
SELECT NVL(TO_CHAR(comm),'N/A') FROM emp; -- NULL 顯示 N/A
NULL 處理黃金法則
- 任何運算遇 NULL 結果為 NULL
- 僅
NVL, DECODE, REPLACE, CONCAT, DUMP 在引數為 NULL 時可能回傳非 NULL
- 聚合前務必用
NVL(col,0) 處理數值欄位
- 上一篇文章: Oracle 分頁查詢最佳實踐:ROWNUM 陷阱與高效能分頁寫法
- 下一篇文章: Oracle DBA 常見問題精選 20 題:壞塊搶救、複寫配置、匯出過濾、密碼檔與謂詞求值順序
Copyright ©
程式碼之家 All Rights Reserved