首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 單列函式完整分類筆記:數值、字元、日期、轉換、邏輯判斷與字串長度/位置

     編輯:Oracle 資料庫基礎

Oracle 單列函式 (Single-Row Functions) 逐列運算、逐列回傳,是 SQL 查詢與 PL/SQL 運算的基石。本文依官方分類整理六大類函式:數值、字元、日期、轉換、通用比較/邏輯、字串長度/位置,附語法、參數說明與實戰範例。

1. 數值函式

函式功能範例結果
ABS絕對值ABS(-15)15
ROUND四捨五入 (支援日期)ROUND(45.926, 2) / ROUND(SYSDATE, 'MONTH')45.93 / 月初
TRUNC截斷 (支援日期)TRUNC(45.926, 2) / TRUNC(SYSDATE, 'YEAR')45.92 / 年初
CEIL / FLOOR向上/向下取整CEIL(3.1) / FLOOR(3.9)4 / 3
MOD餘數MOD(10, 3)1
POWER / SQRT / EXP / LN / LOG冪/根/指數/自然對數/對數POWER(2,3)=8-
SIGN正負號SIGN(-5)-1
三角函式SIN/COS/TAN/ASIN/ACOS/ATAN/ATAN2/SINH/COSH/TANH--

2. 字元函式

函式功能範例結果
CONCAT / \|\|串接CONCAT('A','B') / 'A'\|\|'B''AB'
SUBSTR子字串 (m=0 視同 1,負數從右算)SUBSTR('ABCDE', 2, 3) / SUBSTR('ABCDE', -3, 2)'BCD' / 'CD'
INSTR搜尋位置 (回傳 0 表不存在)INSTR('ABCDE', 'C')3
REPLACE取代REPLACE('JACK', 'J', 'B')'BACK'
TRANSLATE字元級轉換 (一對一)TRANSLATE('123', '12', 'AB')'AB3'
LTRIM / RTRIM / TRIM移除左/右/兩側指定字元 (預設空白)TRIM(' AB ')'AB'
LPAD / RPAD左/右填充至指定長度LPAD('5', 3, '0')'005'
UPPER / LOWER / INITCAP大寫/小寫/首字母大寫INITCAP('hello world')'Hello World'
CHR / ASCII字碼↔字元CHR(65)='A'-
LENGTH / LENGTHB字元長度 / 位元組長度 (視字元集)LENGTH('中文')=2-

3. 日期函式

函式功能範例結果
SYSDATE目前日期時間 (Session 時區)--
ADD_MONTHS加減月份 (自動處理月末)ADD_MONTHS('2024-01-31', 1)'2024-02-29'
MONTHS_BETWEEN兩日期月份差 (可為負)MONTHS_BETWEEN('2024-12-31','2024-01-01')~11.97
LAST_DAY該月最後一天LAST_DAY(SYSDATE)-
NEXT_DAY指定星期的下一天NEXT_DAY(SYSDATE, 'FRIDAY')-
ROUND / TRUNC日期四捨五入/截斷 (單位: YEAR, MONTH, DAY, HH, MI)ROUND(SYSDATE, 'MONTH')月初 00:00
EXTRACT擷取欄位 (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR...)EXTRACT(MONTH FROM SYSDATE)數值

4. 轉換函式

函式方向語法關鍵格式元素
TO_CHAR日期/數值 → 字串TO_CHAR(dt, 'fmt') / TO_CHAR(num, 'fmt')YYYY, MM, DD, HH24, MI, SS, FF / 9, 0, ., ,, $, L, MI, PR
TO_DATE字串 → 日期TO_DATE(str, 'fmt')同 TO_CHAR 日期部份
TO_TIMESTAMP字串 → TimestampTO_TIMESTAMP(str, 'fmt')含 FF, TZH:TZM
TO_NUMBER字串 → 數值TO_NUMBER(str, 'fmt')同 TO_CHAR 數值部份
TO_LOBLONG → LOBTO_LOB(long_col)僅用於 CREATE TABLE ... AS SELECT

日期格式元素速查


YYYY / YEAR / YY / Y      -- 年
MM / MON / MONTH          -- 月
DD / DAY / DY             -- 日/星期
HH24 / HH12 / HH          -- 時
MI                        -- 分
SS                        -- 秒
FF[1-9]                   -- 小數秒
Q                         -- 季度
WW / IW / W               -- 週數 (ISO/月內)
D / DD / DDD              -- 週內/月內/年內第幾天

固定 Session 日期格式 (優先序高→低)

  1. ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
  2. 環境變數 NLS_DATE_FORMAT (Linux) / 登錄 (Windows)
  3. 參數檔 NLS_DATE_FORMAT

5. 通用比較/邏輯函式

函式語法邏輯等價範例
NVLNVL(e1, e2)IF e1 IS NULL THEN e2 ELSE e1NVL(comm, 0)
NVL2NVL2(e1, e2, e3)IF e1 IS NOT NULL THEN e2 ELSE e3NVL2(comm, 'Y', 'N')
COALESCECOALESCE(e1, e2, ...)第一個非 NULLCOALESCE(comm, bonus, 0)
NULLIFNULLIF(e1, e2)IF e1=e2 THEN NULL ELSE e1NULLIF(len, 0)
DECODEDECODE(expr, s1, r1, s2, r2, ..., default)CASE WHEN expr=s1 THEN r1 ... ELSE defaultDECODE(deptno, 10, 'ACCT', 20, 'RES', 'OTH')
CASE標準 SQL 條件表達式CASE WHEN cond THEN result ... ELSE default END靈活、可讀性佳

6. 實戰組合範例


-- 顯示員工姓名、薪資(千分位)、入職年月、傭金狀態
SELECT last_name,
       TO_CHAR(salary, 'L999,999.99') AS salary_fmt,
       TO_CHAR(hire_date, 'YYYY-MM') AS hire_ym,
       DECODE(SIGN(NVL(commission_pct,0)), 1, 'Y', 'N') AS has_comm
FROM employees
WHERE hire_date >= ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12)
ORDER BY salary DESC;

單列函式是 SQL 表達力的核心。熟練掌握六大類函式語法、參數與組合技巧,能寫出簡潔、高效、可維護的查詢與 PL/SQL 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved