Oracle 核心單行函數涵蓋字符、數值、日期、轉換四大類。本文以實戰案例為主線,串聯 LOWER/UPPER、SUBSTR/INSTR、TO_DATE、ROUND/TRUNC 等高頻函數,代碼即復制即運行。
一、字符函數實戰
| 需求 | SQL | 說明 |
| 姓名小寫顯示 | SELECT LOWER(ename) FROM emp; | |
| 姓名長度=5 的員工 | SELECT * FROM emp WHERE LENGTH(ename)=5; | |
| 截取第 2-4 字符 | SELECT SUBSTR(ename,2,3) FROM emp; | SMITH → MIT |
| 首字母大寫,其餘小寫 | SELECT UPPER(SUBSTR(ename,1,1)) || LOWER(SUBSTR(ename,2)) FROM emp; | || 為連接符 |
| 將 A 替換為 a(僅顯示) | SELECT REPLACE(ename,'A','a') FROM emp; | 不修改數據 |
二、日期轉換:TO_DATE 靈活插入
INSERT INTO myemp VALUES (7903,'MORFLAME','ANALYST',7566,
TO_DATE('1988-1-1','YYYY-MM-DD'), 2345.23, 555.55, 20);
-- 支持任意格式:TO_DATE('1988/1/1','YYYY/MM/DD') 亦可
-- 默認格式 'DD-MON-RR' (01-JAN-88) 可通過 NLS_DATE_FORMAT 修改
三、數值取整:ROUND vs TRUNC
| 函數 | SQL | 結果 | 說明 |
| ROUND | ROUND(2345.23) | 2345 | 四捨五入至整數 |
| ROUND(2345.23, 1) | 2345.2 | 保留 1 位小數 |
| ROUND(555.55, -1) | 560 | 十位四捨五入 |
| TRUNC | TRUNC(555.55, 1) | 555.5 | 直接截斷 1 位小數 |
| TRUNC(555.55, -1) | 550 | 十位截斷 |
| TRUNC(555.55) | 555 | 截斷至整數 |
四、其他常用數值函數
CEIL(n):≥ n 的最小整數(CEIL(555.55)=556)
FLOOR(n):≤ n 的最大整數(FLOOR(555.55)=555)
MOD(m,n):取模(MOD(12,3)=0)
ABS(n):絕對值(ABS(-3)=3)
五、空值處理:NVL
NVL(comm, 0) -- 數值為空轉 0
NVL(hiredate, DATE '1997-01-01') -- 日期為空轉默認值
NVL(job, 'No Job Yet') -- 字符為空轉默認值