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

Oracle 常用字串與數值函數速查:ROUND、LPAD/RPAD、LTRIM/RTRIM、INSTR、SUBSTR 實戰詳解

     編輯:Oracle 資料庫相關知識

本文彙整 Oracle 開發中最高頻的字串操作與數值格式化函數,包含四捨五入、填充/修剪、搜尋定位、子字串擷取,附帶參數說明、邊界行為與實戰範例,適合做為日常開發速查手冊。

一、數值四捨五入:ROUND(number, num_digits)

  • 功能:將數值四捨五入至指定小數位
  • 參數:num_digits 可為正(小數位)、負(十位、百位...)、零(整數)
  • 範例:ROUND(5555.6666, 2) → 5555.67;ROUND(5555.6666, -2) → 5600

二、字串填充:LPAD / RPAD

語法

LPAD(string, n, [pad_string])  -- 左填充
RPAD(string, n, [pad_string])  -- 右填充
  • n:目標長度。若 n < LENGTH(string),則截取前 n 字元
  • pad_string:填充字元,預設為空格

範例速查表

呼叫結果說明
LPAD('tech', 7)' tech'左填 3 空格
LPAD('tech', 2)'te'截取前 2 字元
LPAD('tech', 8, '0')'0000tech'左填 0 補齊 8 位
RPAD('tech', 8, '0')'tech0000'右填 0
RPAD('tech on the net', 16, 'z')'tech on the netz'右填 1 個 z

三、字串修剪:LTRIM / RTRIM

核心邏輯:逐字元比對,而非整體字串匹配。從左/右邊開始,只要字元出現在 trim_set 中就移除,直到遇到不在集合中的字元為止。

LTRIM 經典陷阱範例

SELECT LTRIM('1092002081100058424', '109') FROM dual;  -- '2002081100058424'
SELECT LTRIM('1091000000002671251', '109') FROM dual;  -- '2671251'
SELECT LTRIM('1000000002671251', '1') FROM dual;       -- '000000002671251'
SELECT LTRIM('1000000002671251', '10') FROM dual;      -- '2671251' (1 和 0 都被移除)

解析:第 4 行 '10' 視為字元集合 {'1','0'},故前導所有 1 和 0 全被剝離。

RTRIM 範例

SELECT RTRIM('wfrqqww', 'qq') FROM dual;  -- 'wfr' (移除右側所有 w 和 q)

四、字串搜尋:INSTR

語法

INSTR(string1, string2, [start_position], [nth_appearance])
  • start_position:正數從左往右,負數從右往左(返回位置仍以從左起算)
  • nth_appearance:第 N 次出現,預設 1
  • 返回:找到返回位置(從 1 起算),未找到返回 0

範例

INSTR('syranmo', 's')           → 1
INSTR('syranmo', 'ra')          → 3
INSTR('syran mo', 'a', 1, 2)    → 0 (只有 1 個 'a')
INSTR('syran mo', 'a', -1, 1)   → 6 (從右往左找第一個 'a')

五、子字串擷取:SUBSTR

語法

SUBSTR(string, start_position, [length])
  • start_position:0 或 1 皆為第一字元;負數表從右往左數(-1 為最後一字元)
  • length:省略則擷取至字串末尾

範例

SUBSTR('Hello World', 1, 1)   → 'H'
SUBSTR('Hello World', 0, 1)   → 'H'  (0 視同 1)
SUBSTR('Hello World', 2, 4)   → 'ello'
SUBSTR('Hello World', -3, 3)  → 'rld' (倒數第 3 字元起取 3 個)
SUBSTR('Hello World', -5)     → 'World'

六、常見組合模式

需求組合寫法
去除首尾空格TRIM(col) 或 LTRIM(RTRIM(col))
取逗號前內容SUBSTR(col, 1, INSTR(col, ',')-1)
取最後一段(以 / 分隔)SUBSTR(col, INSTR(col, '/', -1)+1)
固定寬度靠右補零LPAD(TO_CHAR(num), 10, '0')
手機號碼遮罩RPAD(SUBSTR(phone,1,3), LENGTH(phone), '*')

熟練掌握這些函數的參數語義與邊界行為(特別是 LTRIM/RTRIM 的字元集合邏輯、INSTR 的負數定位、SUBSTR 的 0/1 等價性),能讓字串處理邏輯更簡潔、更健壯。

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