Oracle 內置函數超過百餘個,按功能分為五大類。本文提供分類索引、代表函數、典型用法、系統上下文函數,構建函數知識地圖,遇到需求快速定位工具函數。
LOWER, UPPER, LENGTH, SUBSTR, REPLACE, INSTR,
LPAD, RPAD, LTRIM, RTRIM, TRIM, TRANSLATE, ASCII, CHR
-- 典型:首字母大寫
SELECT UPPER(SUBSTR(ename,1,1)) || LOWER(SUBSTR(ename,2)) FROM emp;
-- 典型:按模式填充
SELECT LPAD(ename, 10, '*') FROM emp; -- *****SMITH
ROUND(n, [m]), TRUNC(n, [m]), MOD(m, n),
CEIL(n), FLOOR(n), ABS(n), POWER, SQRT, EXP, LN, LOG,
SIN, COS, TAN, SIGN
-- 典型:四捨五入/截斷多精度
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
SYSDATE, ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY,
ROUND(date, 'fmt'), TRUNC(date, 'fmt'),
NEW_TIME, EXTRACT
-- 典型:入職 8 個月後
SELECT * FROM emp WHERE SYSDATE > ADD_MONTHS(hiredate, 8);
-- 典型:入職天數
SELECT ename, TRUNC(SYSDATE - hiredate) "入職天數" FROM emp;
-- 典型:入職當月最後一天
SELECT hiredate, ename FROM emp WHERE LAST_DAY(hiredate) - 2 = hiredate;
TO_CHAR(date/num, 'fmt') -- 日期/數值 → 字符串
TO_DATE(str, 'fmt') -- 字符串 → 日期
TO_NUMBER(str, 'fmt') -- 字符串 → 數值
-- 典型:日期格式化輸出
SELECT ename, TO_CHAR(hiredate, 'YYYY/MM/DD HH24:MI:SS'),
TO_CHAR(sal, 'L99999.99') FROM emp;
-- 典型:按年/月過濾
SELECT ename, hiredate FROM emp WHERE TO_CHAR(hiredate, 'YYYY') = '1988';
SELECT ename, hiredate FROM emp WHERE TO_CHAR(hiredate, 'YYYY-MM') = '1988-12';
SYS_CONTEXT('USERENV', parameter)
-- 參數示例:
TERMINAL, LANGUAGE, DB_NAME, NLS_DATE_FORMAT, SESSION_USER
-- 典型:
SELECT SYS_CONTEXT('USERENV', 'LANGUAGE') FROM dual; -- 語言/字符集
SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM dual; -- 當前用戶
窗口函數(ROW_NUMBER, RANK, LAG/LEAD, SUM() OVER 等)屬於分析函數範疇,單獨成篇,詳見《Oracle 9i 分析函數實戰指南》。