字串函數
| 函數 | 說明 | 範例 | 結果 |
ASCII(c) | 回傳字元 ASCII 碼 | ASCII('A') | 65 |
CHR(n) | 回傳數字對應字元 | CHR(65) | A |
CONCAT(s1,s2) | 連接兩字串 (同 ||) | CONCAT('A','B') | AB |
INITCAP(s) | 首字母大寫,其餘小寫 | INITCAP('hello world') | Hello World |
INSTR(s, sub, pos, nth) | 搜尋子字串位置 | INSTR('oracle','ra',1,2) | 9 |
LENGTH(s) | 字串長度 (字元數) | LENGTH('中文') | 2 |
LOWER(s) | 轉小寫 | LOWER('AbC') | abc |
UPPER(s) | 轉大寫 | UPPER('AbC') | ABC |
LPAD(s, n, pad) | 左補字元至長度 n | LPAD('123',6,'0') | 000123 |
RPAD(s, n, pad) | 右補字元至長度 n | RPAD('123',6,'0') | 123000 |
LTRIM(s, chars) | 移除左側指定字元 (預設空白) | LTRIM(' abc') | abc |
RTRIM(s, chars) | 移除右側指定字元 | RTRIM('abc ') | abc |
TRIM([BOTH|LEADING|TRAILING] c FROM s) | 標準修剪函數 | TRIM(' abc ') | abc |
SUBSTR(s, pos, len) | 擷取子字串 | SUBSTR('abcdef',2,3) | bcd |
REPLACE(s, old, new) | 取代字串 | REPLACE('abc','a','x') | xbc |
TRANSLATE(s, from, to) | 字元級對照取代 | TRANSLATE('abc','ab','12') | 12c |
數學函數
| 函數 | 說明 | 範例 | 結果 |
ABS(n) | 絕對值 | ABS(-5) | 5 |
CEIL(n) | 大於等於 n 的最小整數 | CEIL(3.2) | 4 |
FLOOR(n) | 小於等於 n 的最大整數 | FLOOR(3.8) | 3 |
MOD(m,n) | 餘數 (m - n*FLOOR(m/n)) | MOD(10,3) | 1 |
POWER(m,n) | m 的 n 次方 | POWER(2,3) | 8 |
ROUND(n, decimals) | 四捨五入 | ROUND(3.14159,2) | 3.14 |
TRUNC(n, decimals) | 截斷 (不四捨五入) | TRUNC(3.14159,2) | 3.14 |
SQRT(n) | 平方根 | SQRT(16) | 4 |
SIGN(n) | 正負號 (1/0/-1) | SIGN(-5) | -1 |
EXP(n) | e 的 n 次方 | EXP(1) | 2.718... |
LN(n) | 自然對數 | LN(2.718) | 1 |
LOG(b,n) | 以 b 為底對數 | LOG(10,100) | 2 |
SIN/COS/TAN | 三角函數 (弧度) | SIN(3.14159/2) | 1 |
日期函數
| 函數 | 說明 | 範例 | 結果類型 |
SYSDATE | 資料庫伺服器當前日期時間 | SYSDATE | DATE |
SYSTIMESTAMP | 含時區與毫秒的當前時間 | SYSTIMESTAMP | TIMESTAMP WITH TIME ZONE |
CURRENT_DATE | Session 時區當前日期 | CURRENT_DATE | DATE |
CURRENT_TIMESTAMP | Session 時區當前時間戳 | CURRENT_TIMESTAMP | TIMESTAMP WITH TIME ZONE |
ADD_MONTHS(d, n) | 日期加減 n 月 | ADD_MONTHS(SYSDATE,3) | DATE |
MONTHS_BETWEEN(d1,d2) | 兩日期月數差 (含小數) | MONTHS_BETWEEN(d1,d2) | NUMBER |
LAST_DAY(d) | 該月最後一天 | LAST_DAY(SYSDATE) | DATE |
NEXT_DAY(d, weekday) | 日期 d 之後的第一個指定星期幾 | NEXT_DAY(SYSDATE,'MONDAY') | DATE |
ROUND(d, fmt) | 日期捨入 (fmt: YEAR/MONTH/DAY...) | ROUND(SYSDATE,'MONTH') | DATE |
TRUNC(d, fmt) | 日期截斷 | TRUNC(SYSDATE,'YEAR') | DATE |
EXTRACT(field FROM d) | 擷取日期欄位 (YEAR/MONTH/DAY/HOUR...) | EXTRACT(MONTH FROM SYSDATE) | NUMBER |
NEW_TIME(d, tz1, tz2) | 時區轉換 (舊版) | NEW_TIME(d,'GMT','PST') | DATE |
TO_CHAR(d, fmt, nls) | 日期轉字串 | TO_CHAR(SYSDATE,'YYYY-MM-DD') | VARCHAR2 |
TO_DATE(s, fmt, nls) | 字串轉日期 | TO_DATE('2023-01-01','YYYY-MM-DD') | DATE |
日期格式化元素速查
| 元素 | 說明 | 範例輸出 |
| YYYY / YY | 4/2 位數年份 | 2023 / 23 |
| MM / MON / MONTH | 月份數字 / 縮寫 / 全名 | 01 / JAN / JANUARY |
| DD / DDD | 月內第幾天 / 年內第幾天 | 15 / 045 |
| HH24 / HH12 | 24/12 小時制 | 14 / 02 |
| MI / SS | 分 / 秒 | 30 / 59 |
| FF / FF3 | 毫秒 / 3 位毫秒 | .123456 / .123 |
| DAY / DY | 星期全名 / 縮寫 | MONDAY / MON |
| AM / PM | 上午/下午標記 | PM |
| TZD / TZH / TZM | 時區縮寫/時差時/時差分 | PST / -08 / 00 |
常用日期運算模式
-- 間隔運算 (10g+)
SYSDATE - INTERVAL '7' MINUTE
SYSDATE - INTERVAL '7' HOUR
SYSDATE - INTERVAL '7' DAY
SYSDATE - INTERVAL '7' MONTH
SYSDATE - INTERVAL '7' YEAR
SYSDATE - 8 * INTERVAL '2' HOUR
-- 毫秒精度 (需 TIMESTAMP)
TO_CHAR(CURRENT_TIMESTAMP(9), 'MI:SS.FF') -- 精度可至 9 位
-- 程式執行時間測量 (毫秒)
DECLARE
l_start NUMBER := DBMS_UTILITY.GET_TIME; -- 百分之一秒
BEGIN
-- 要測量的程式碼
FOR i IN 1..1000 LOOP NULL; END LOOP;
DBMS_OUTPUT.PUT_LINE(ROUND((DBMS_UTILITY.GET_TIME - l_start)/100, 2) || ' seconds');
END;
轉換函數
| 函數 | 說明 |
TO_CHAR(n|d, fmt, nls) | 數字/日期轉字串 |
TO_NUMBER(s, fmt, nls) | 字串轉數字 |
TO_DATE(s, fmt, nls) | 字串轉日期 |
TO_TIMESTAMP(s, fmt) | 字串轉時間戳 |
CAST(expr AS type) | ANSI 標準轉型 |
CHARTOROWID(s) | 字串轉 ROWID |
ROWIDTOCHAR(rowid) | ROWID 轉字串 |
HEXTORAW(s) | 十六進位字串轉 RAW |
RAWTOHEX(raw) | RAW 轉十六進位字串 |
CONVERT(s, dest_cs, src_cs) | 字元集轉換 |