首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle PL/SQL 單行函數與組函數完整參考手冊

     編輯:Oracle 資料庫相關知識

函數分類總覽

Oracle 內建函數分為兩大類:

  • 單行函數:逐行操作,返回每行一個結果,可用於 SELECT、WHERE、ORDER BY、SET、VALUES 等子句
  • 組函數(多行/聚合函數):對多行數據操作,返回單一結果,常搭配 GROUP BY、HAVING 使用

單行函數詳解

1. 字符函數

函數語法說明示例
ASCIIASCII(char)返回字符 ASCII 碼ASCII('A') → 65
CHRCHR(n)返回數字對應字符CHR(65) → 'A'
CONCATCONCAT(s1,s2)拼接字符串,等同 ||CONCAT('AB','C') → 'ABC'
INITCAPINITCAP(s)每個單詞首字母大寫INITCAP('hello world') → 'Hello World'
INSTRINSTR(s1,s2[,pos[,occur]])查找子串位置,支援反向搜尋INSTR('Mississippi','i',3,3) → 11
LENGTHLENGTH(s)返回字符長度LENGTH('Oracle') → 6
LOWER/UPPERLOWER(s)/UPPER(s)大小寫轉換UPPER('abc') → 'ABC'
LPAD/RPADLPAD(s,n[,pad])左/右填充至指定長度LPAD('5',3,'0') → '005'
LTRIM/RTRIM/TRIMTRIM([LEADING|TRAILING|BOTH] c FROM s)修剪指定字符TRIM(' ABC ') → 'ABC'
REPLACEREPLACE(s,old,new)替換子串REPLACE('JACK','J','B') → 'BACK'
SUBSTR/SUBSTRBSUBSTR(s,pos[,len])截取子串,支援負數從末尾計算SUBSTR('ABCDEF',2,3) → 'BCD'
SOUNDEXSOUNDEX(s)返回發音代碼,模糊匹配利器SOUNDEX('SMITH') = SOUNDEX('SMYTHE')
TRANSLATETRANSLATE(s,from,to)字符級逐一替換TRANSLATE('123','12','AB') → 'AB3'

2. 數字函數

函數用途示例
ABS/CEIL/FLOOR/ROUND/TRUNC絕對值/向上/向下/四捨五入/截斷取整ROUND(123.456,2) → 123.46
MOD求餘MOD(10,3) → 1
POWER/SQRT/EXP/LN/LOG冪/平方根/指數/自然對數/任意底對數POWER(2,10) → 1024
SIN/COS/TAN/ASIN/ACOS/ATAN三角/反三角函數(弧度制)ACOS(-1) → 3.14159
SIGN符號判斷SIGN(-5) → -1

3. 日期函數

函數說明示例
SYSDATE當前日期時間SYSDATE → 2024-05-09 14:30:00
ADD_MONTHS加減月份ADD_MONTHS(SYSDATE,3)
LAST_DAY月份最後一天LAST_DAY(SYSDATE)
MONTHS_BETWEEN兩日期月差MONTHS_BETWEEN(d1,d2)
NEXT_DAY下一個指定週幾NEXT_DAY(SYSDATE,'FRIDAY')
NEW_TIME時區轉換NEW_TIME(d,'GMT','PST')
ROUND/TRUNC日期捨入/截斷(按 fmt)TRUNC(SYSDATE,'MM') → 月首日

4. 轉換函數

函數用途格式模型關鍵字
TO_CHAR日期/數字 → 字符YYYY-MM-DD HH24:MI:SS, 999G999D99
TO_DATE字符 → 日期YYYY-MM-DD, DD-MON-YYYY
TO_NUMBER字符 → 數字999G999D99
CHARTOROWID/ROWIDTOCHARROWID ↔ 字符—
HEXTORAW/RAWTOHEX十六進制 ↔ RAW—
CONVERT字符集轉換CONVERT(s,'US7ASCII','WE8ISO8859P1')

5. 其他常用單行函數

  • DECODE(expr, search, result [, search, result]... [, default]):IF-THEN-ELSE 邏輯
  • GREATEST/LEAST(expr1, expr2,...):最大/最小值
  • NVL(expr1, expr2):NULL 替換,NVL(comm,0)
  • USER/UID/USERENV('SESSIONID'):會話資訊
  • VSIZE(expr):內部表示位元組數
  • DUMP(expr, fmt, start, len):數據結構調試
  • EMPTY_BLOB()/EMPTY_CLOB():LOB 初始化
  • BFILENAME(dir, file):外部檔案定位器

組函數(聚合函數)詳解

函數語法說明
AVGAVG([DISTINCT|ALL] expr)平均值,預設 ALL
COUNTCOUNT({*|DISTINCT|ALL} expr)行數,* 含 NULL
MAX/MINMAX([DISTINCT|ALL] expr)最大/最小值,DISTINCT 無實際影響
SUMSUM([DISTINCT|ALL] expr)求和
STDDEVSTDDEV([DISTINCT|ALL] expr)標準差(方差開根號)
VARIANCEVARIANCE([DISTINCT|ALL] expr)統計方差

分組查詢進階

GROUP BY 基礎

SELECT deptno, COUNT(*), AVG(sal)
FROM emp
GROUP BY deptno;

HAVING 過濾分組

SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) > 10000;

注意:WHERE 不能使用組函數,必須用 HAVING。

ORDER BY 排序分組結果

SELECT deptno, COUNT(*) cnt
FROM emp
GROUP BY deptno
ORDER BY cnt DESC;

函數嵌套與優先級

遵循「由內而外、由左至右」原則。常見嵌套模式:

  • 組函數嵌套單行函數:AVG(NVL(comm,0))
  • 單行函數嵌套組函數:TO_CHAR(SUM(sal),'$99,999')
  • 多層嵌套:GREATEST(COUNT(DISTINCT job), COUNT(DISTINCT mgr))

NULL 值處理核心原則

  • 算術運算遇 NULL 結果為 NULL
  • 多數單行函數遇 NULL 返回 NULL
  • 例外:NVL、DECODE、CONCAT、REPLACE、DUMP 可處理 NULL
  • 組函數自動忽略 NULL(COUNT(*) 除外)

總結

熟練掌握單行函數與組函數,是編寫高效 SQL 的基石。重點記憶:字符處理(SUBSTR/REPLACE/TRIM)、日期運算(ADD_MONTHS/TRUNC)、類型轉換(TO_CHAR/TO_DATE)、NULL 處理(NVL/COALESCE)、聚合分組(GROUP BY/HAVING)。實戰中善用函數嵌套簡化邏輯,避免在 WHERE 中濫用函數導致索引失效。

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