TRIM() 是被低估的強大函數,許多人只知 LTRIM/RTRIM 去空格,實則它支援自定義字符集合與方向控制。
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
BOTH(預設):同時去首尾。LEADING:僅去前綴。TRAILING:僅去後綴。remstr:要去除的字符集合(非單一字串),預設空格。-- 1. 預設去首尾空格
SELECT TRIM(' bar '); -- 'bar'
-- 2. 去除指定前綴字符(注意:remstr 是字符集合,而非子串)
SELECT TRIM(LEADING ',' FROM ',,barxxx'); -- 'barxxx' (去掉所有前導 ',')
-- 3. 去除指定首尾字符
SELECT TRIM(BOTH ',' FROM ',,bar,,,'); -- 'bar'
-- 4. 僅去後綴
SELECT TRIM(TRAILING ',' FROM 'barxxyz,,'); -- 'barxxyz'
關鍵細節:
remstr視為字符集合,TRIM(BOTH 'abc' FROM 'abcabc')會去除所有首尾的a、b、c,而非整體匹配'abc'。
表 news 欄位 newstext 以 [!--empirenews.page--] 結尾,需批量移除:
UPDATE news
SET newstext = TRIM(TRAILING '[!--empirenews.page--]' FROM newstext)
WHERE newstext LIKE '%[!--empirenews.page--]';
配合 WHERE 避免全表掃描,僅處理含目標後綴的行。
TRIM/LTRIM/RTRIM 均為多字節安全,中文、Emoji 均正確處理。
| 函數 | 功能 | 適用場景 |
|---|---|---|
LTRIM(str) | 去左空格 | 簡單去首空格 |
RTRIM(str) | 去右空格 | 簡單去尾空格 |
TRIM(str) | 去首尾空格 | 通用清洗 |
TRIM(LEADING 'x' FROM str) | 去指定字符集合前綴 | 清洗固定前綴標記 |
TRIM(TRAILING 'x' FROM str) | 去指定字符集合後綴 | 清洗固定後綴分隔符 |