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

Oracle TRIM/LTRIM/RTRIM 函數深度解析:字元移除規則與常見誤區

     編輯:Oracle 資料庫基礎

TRIM 三種模式

TRIM([LEADING | TRAILING | BOTH] [trim_char FROM] trim_source)
  • BOTH (預設):移除首尾指定字元 (預設空白)。
  • LEADING:僅移除前導字元。
  • TRAILING:僅移除尾隨字元。

範例

SELECT TRIM('  trim both  ')           FROM DUAL; -- 'trim both'
SELECT TRIM(BOTH FROM '  both  ')      FROM DUAL; -- 'both'
SELECT TRIM(LEADING FROM '  leading ') FROM DUAL; -- 'leading '
SELECT TRIM(TRAILING FROM ' trailing ') FROM DUAL; -- ' trailing'
SELECT TRIM(TRAILING 'd' FROM 'Hello World') FROM DUAL; -- 'Hello Worl'

LTRIM / RTRIM 關鍵行為差異

LTRIM(str, set):從左向右掃描,只要字元出現在 set 中即移除,遇到第一個 不在 set 中 的字元即停止,不再檢查後續字元。

經典誤區演示

SELECT LTRIM('109224323', '109') FROM DUAL; -- '224323'  (移除 1,0,9)
SELECT LTRIM('10900094323', '109') FROM DUAL; -- '4323'   (連續 0 也被移除,因 0 ∈ set)
SELECT LTRIM('10900111000991110224323', '109') FROM DUAL; -- '224323'
SELECT LTRIM('109200111000991110224323', '109') FROM DUAL; -- '200111000991110224323' (遇到 2 停止)
SELECT LTRIM('902100111000991110224323', '109') FROM DUAL; -- '2100111000991110224323' (9,0 皆在 set 中被移除)

結論:LTRIM('abc', 'ab') 不是移除前綴 'ab',而是移除所有屬於字元集合 {'a','b'} 的前導字元。RTRIM 同理從右向左。

實務建議

  • 需移除固定前綴/後綴字串時,勿用 LTRIM/RTRIM,改用 SUBSTR + INSTR 或 12c TRIM(TRAILING 'suffix' FROM col) (僅支援單一字元)。
  • 移除特定字元集合 (如去除所有標點) 則適合用 TRANSLATE 或 REGEXP_REPLACE。
  • TRIM 回傳 VARCHAR2;輸入為 LOB 時回傳 LOB。
  • 任一參數為 NULL → 回傳 NULL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved