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

Oracle 內建函數大全:數值、字串、日期、轉換、雜項分類速查手冊

     編輯:Oracle 資料庫相關知識

Oracle 提供豐富的單列函數,掌握核心函數能讓 SQL 更簡潔、效能更高。本文按資料型別分類整理高頻函數,附參數說明、行為細節與實戰範例,適合開發、調優時速查參考。

一、數值函數

函數說明範例/備註
ROUND(n[,m])四捨五入,m 為小數位,負數向左捨入ROUND(23.56,1)=23.6、ROUND(23.56,-1)=20
TRUNC(n[,m])截斷不捨入,參數同 ROUNDTRUNC(23.56,1)=23.5
MOD(n1,n2)餘數,n2=0 回傳 n1MOD(24,5)=4
CEIL/FLOOR向上/向下取整CEIL(-18.2)=-18、FLOOR(-2.2)=-3
POWER/SQRT/EXP/LN/LOG冪、平方根、指數、自然對數、對數POWER(2.2,2.2)
SIGN/ABS正負號/絕對值SIGN(-14)=-1
BITAND位元 AND 運算BITAND(3,9)=1 (0011 & 1001 = 0001)
三角函數群SIN/COS/TAN/ASIN/ACOS/ATAN/ATAN2/SINH/COSH/TANH參數為弧度,精度 30-38 位

二、字串函數(回傳字串)

函數說明關鍵行為
UPPER/LOWER/INITCAP大寫/小寫/首字母大寫支援 CLOB/NCLOB
LPAD/RPAD(str,n[,pad])左/右填充至長度 nn < len 截斷;pad 為 null 用空格
TRIM([LEADING/TRAILING/BOTH] c FROM str)修剪首尾字元預設修剪空格;c 長度必為 1
LTRIM/RTRIM(str[,set])移除左/右側包含於 set 的字元非單字元修剪,LTRIM('WWh','Wh')='h'
REPLACE(str,old[,new])替換/刪除子串new 為 null 即刪除
TRANSLATE(str,from,to)字元級一對一映射替換TRANSLATE('abc','ab','12')='12c';長度必等
SUBSTR(str,pos[,len])子串擷取pos=0 視為 1;pos<0 從右數
SOUNDEX發音編碼(英文)同音異拼比對利器

三、字串函數(回傳數值)

  • INSTR(str, substr[, pos[, occ]]):搜尋子串位置,pos 正負控制方向,occ 第 N 次出現。
  • LENGTH/LENGTHB/LENGTHC:字元/位元/Unicode 字元長度。LENGTH('')=NULL(非 0)。
  • ASCII/CHR:字元與碼值互轉。

四、日期函數

函數說明範例/陷阱
SYSDATE / CURRENT_DATE資料庫/Session 時區當前日期時間極少數情況相差 1 秒(毫秒四捨五入)
ADD_MONTHS(d,n)月份加減,自動處理月末ADD_MONTHS('2024-01-31',1)='2024-02-29'
LAST_DAY(d)該月最後一天
NEXT_DAY(d, weekday)下一個指定週幾weekday 需符合 Session 語言(中文『星期四』/英文『THURSDAY』)
MONTHS_BETWEEN(d1,d2)月份差(可為小數)結果可正負
ROUND/TRUNC(date[,fmt])日期四捨五入/截斷fmt='MM' 到月首、'YYYY' 到年首
EXTRACT(field FROM dt)提取年/月/日/時/分/秒field: YEAR/MONTH/DAY/HOUR/MINUTE/SECOND
CURRENT_TIMESTAMP/LOCALTIMESTAMP/SYSTIMESTAMP含時區/毫秒精度的時間戳精度參數 0-6

五、轉換函數

函數用途關鍵格式元素
TO_CHAR(n/d/timestamp [,fmt [,nls]])數值/日期/時間戳 → 字串YYYY-MM-DD HH24:MI:SS、FM999G999D00、JSP (數字轉英文詞)
TO_DATE(str[,fmt[,nls]])字串 → 日期fmt='J' 為儒略日 (1-5373484)
TO_NUMBER(str[,fmt[,nls]])字串 → 數值9G999D99 群組/小數分隔
CAST(expr AS type)跨型別轉換支援 CHAR/NUMBER/DATE/ROWID 等互轉
TO_TIMESTAMP/TO_YMINTERVAL/TO_DSINTERVAL字串 → 間隔/時間戳型別

六、雜項單列函數

  • 條件邏輯: DECODE(expr, s1,r1, s2,r2,..., default)(IF-ELSE 鏈)、CASE WHEN ... THEN ... ELSE ... END(標準 SQL,更強大)。
  • 空值處理: NVL(e1,e2)、NVL2(e1,e2,e3)、COALESCE(e1,e2,...)(回傳首個非空)、NULLIF(e1,e2)(相等回傳 NULL)。
  • 極值: GREATEST/LEAST(list)。
  • 層次路徑: SYS_CONNECT_BY_PATH(col, sep) 僅用於 CONNECT BY 查詢。
  • Session 上下文: SYS_CONTEXT('USERENV', 'SESSION_USER/IP_ADDRESS/...') 獲取會話屬性。
  • 標識符: UID、USER、VSIZE(expr)(位元組長度)。
  • LOB 初始化: EMPTY_BLOB()/EMPTY_CLOB()。
  • 字符集/型別 ID: NLS_CHARSET_NAME/ID/DECL_LEN、SYS_TYPEID。
  • 時間轉換: SYS_EXTRACT_UTC(ts) 轉 UTC、NEW_TIME(d, zone1, zone2) 時區轉換。
  • DUMP(expr[,fmt[,start[,len]]]):回傳內部儲存表示(10/16/8 進制/字元),診斷資料損壞利器。

實戰提醒

  1. TO_CHAR(number, 'FM999,999.00') 中 FM 移除前導空格,報表對齊關鍵。
  2. NEXT_DAY 週幾參數**必須匹配 NLS_DATE_LANGUAGE**,跨語言環境請用數字 1-7(1=Sunday)。
  3. TRUNC(date) 移除時間部分,常用於日期分組統計。
  4. 大量資料轉換時,CAST 效能優於 TO_* 系列。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved