字符操縱與數值運算是 SQL 日常開發的 80% 工作量。本文聚焦 CONCAT/SUBSTR/INSTR/LPAD 字符族與 ROUND/TRUNC/MOD 數值族,通過實戰案例講透參數語義、邊界行為、組合技巧。
| 函數 | 語法/示例 | 結果/說明 |
|---|---|---|
| CONCAT | CONCAT(ename, job) ≡ ename || job | SMITHCLERK |
| LENGTH | LENGTH(ename) / LENGTH('同學們') | 5 / 3(字符語義) |
| SUBSTR | SUBSTR(ename, 1, 4) | SMITH → SMIT |
| INSTR | INSTR(ename, 'S') | SMITH→1, ALLEN→0, JONES→5(1-based,未找到返回 0) |
| LPAD | LPAD(ename, 10, '*') | *****SMITH(左填充至 10 位) |
| RPAD | RPAD(ename, 10, '*') | SMITH***** |
SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1) FROM dual; -- 45.92, 46, 50
SELECT TRUNC(45.923, 2), TRUNC(45.923, 0), TRUNC(45.923, -1) FROM dual; -- 45.92, 45, 40
參數 m 語義:
m > 0:小數點右側保留 m 位m = 0:整數m < 0:小數點左側第 |m| 位(十位、百位...)四捨五入/截斷SELECT MOD(10, 3) FROM dual; -- 1
SELECT ename,
LPAD(TO_CHAR(sal, 'L99,999.00'), 15, ' ') AS formatted_sal,
RPAD('Grade: ' || CASE WHEN sal > 3000 THEN 'A' ELSE 'B' END, 20, '.') AS grade_bar
FROM emp;