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

Oracle 內建函數大全:單行、群組、轉換、日期、字串、數值一網打盡

     編輯:Oracle 資料庫基礎

單行函數 vs 群組函數

  • 單行函數:逐行運算,回傳單值,可用於 SELECT、WHERE、ORDER BY、SET、VALUES 子句。
  • 群組函數:多行聚合回傳單值,用於 SELECT、HAVING,常搭配 GROUP BY。

空值處理核心:NVL / NVL2 / COALESCE

NVL(expr1, expr2)        -- expr1 為 NULL 回傳 expr2
NVL2(expr1, expr2, expr3) -- expr1 不為 NULL 回傳 expr2,否則 expr3
COALESCE(e1, e2, ...)     -- 回傳第一個非 NULL 參數(ANSI 標準)

範例:salary + NVL(bonus,0) 避免 NULL 導致整式為 NULL。

字串函數精選

函數用途範例
INITCAP單字首字大寫INITCAP('oracle db') → 'Oracle Db'
INSTR / INSTRB尋找子字串位置(字元/位元組)INSTR('Mississippi','i',3,3) → 11
LENGTH / LENGTHB長度LENGTH('中文') → 2 / LENGTHB → 6 (UTF8)
LPAD / RPAD左/右填充至指定長度LPAD('9',5,'0') → '00009'
LTRIM / RTRIM / TRIM移除前導/尾隨/兩側字元TRIM(' abc ') → 'abc'
REPLACE字串替換REPLACE('jack','j','J') → 'Jack'
SUBSTR / SUBSTRB子字串擷取SUBSTR('abcdef',2,3) → 'bcd'
TRANSLATE字元級轉換TRANSLATE('abc','ab','12') → '12c'
SOUNDEX發音相似比對SOUNDEX('Smith') = SOUNDEX('Smythe')

數值函數精選

  • ROUND/TRUNC:四捨五入/截斷(支援負數位數,如 ROUND(12345,-2)=12300)。
  • CEIL/FLOOR:向上/向下取整。
  • MOD:餘數。POWER:冪次。SQRT:平方根。
  • 三角函數:SIN/COS/TAN/ASIN/ACOS/ATAN(參數為弧度)。
  • 對數:LN (自然)、LOG(base, n)。
  • SIGN:正負號(-1/0/1)。

日期函數精選

函數說明範例
SYSDATE當前日期時間
ADD_MONTHS(d, n)加減月份ADD_MONTHS(SYSDATE, -3)
LAST_DAY(d)該月最後一天LAST_DAY('2024-02-10') → 2024-02-29
MONTHS_BETWEEN(d1, d2)月份差(含小數)
NEXT_DAY(d, '星期')下一個指定週幾NEXT_DAY(SYSDATE, 'FRIDAY')
ROUND(d, 'fmt') / TRUNC(d, 'fmt')日期捨入/截斷TRUNC(SYSDATE,'MM') → 本月 1 號 00:00
NEW_TIME(d, tz1, tz2)時區轉換

轉換函數

  • TO_CHAR(date/num, 'fmt', 'nls'):日期/數值 → 字串。
  • TO_DATE(char, 'fmt', 'nls'):字串 → 日期。
  • TO_NUMBER(char, 'fmt', 'nls'):字串 → 數值。
  • CAST(expr AS type):ANSI 標準轉型,支援集合型別。
  • HEXTORAW / RAWTOHEX / CHARTOROWID / ROWIDTOCHAR:二進制/ROWID 互轉。

群組函數

進階:GROUP BY / HAVING / 巢狀函數

-- 先 WHERE 過濾再 GROUP BY,效率遠優於 HAVING
SELECT job, AVG(sal)
FROM   emp
WHERE  job IN ('PRESIDENT','MANAGER')
GROUP  BY job;

-- 巢狀:群組函數內嵌單行函數
SELECT deptno, GREATEST(COUNT(DISTINCT job), COUNT(DISTINCT mgr)) max_distinct
FROM   emp
GROUP  BY deptno;

常用格式模板

-- 日期
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
-- 數值千分位、貨幣
TO_CHAR(12345.6, 'FM99,999.00', 'NLS_NUMERIC_CHARACTERS=''.,'' NLS_CURRENCY=''$''')
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數說明
AVG / SUM / MIN / MAX基本聚合,支援 DISTINCT/ALL
COUNT(*) / COUNT(expr)* 計列數(含 NULL),expr 計非 NULL 個數
STDDEV / VARIANCE標準差 / 變異數
GROUPING / GROUPING_ID識別 ROLLUP/CUBE 超級聚合行