TRIM([LEADING | TRAILING | BOTH] [trim_char FROM] trim_source)
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(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 同理從右向左。
SUBSTR + INSTR 或 12c TRIM(TRAILING 'suffix' FROM col) (僅支援單一字元)。TRANSLATE 或 REGEXP_REPLACE。TRIM 回傳 VARCHAR2;輸入為 LOB 時回傳 LOB。