MySQL 提供豐富的字串截取函數,掌握其語法與差異能大幅簡化資料處理邏輯。
LEFT(str, length) -- 從左起截取 length 字元
RIGHT(str, length) -- 從右起截取 length 字元
SELECT LEFT('hxsdit.com', 3); -- 'hxs'
SELECT RIGHT('hxsdit.com', 3); -- 'com'
SUBSTRING(str, pos) -- 從 pos 截到結束
SUBSTRING(str, pos, length) -- 從 pos 截取 length 字元
-- pos 可為負數(倒數),length 不可為負
SELECT SUBSTRING('hxsdit.com', 4); -- 'dit.com'
SELECT SUBSTRING('hxsdit.com', 4, 2); -- 'di'
SELECT SUBSTRING('hxsdit.com', -4); -- '.com'
SELECT SUBSTRING('hxsdit.com', -4, 2); -- '.c'
SUBSTRING_INDEX(str, delim, count)
-- count > 0:第 count 個 delim 之前的內容
-- count < 0:倒數第 |count| 個 delim 之後的內容
SELECT SUBSTRING_INDEX('www.baidu.com', '.', 2); -- 'www.baidu'
SELECT SUBSTRING_INDEX('www.baidu.com', '.', -2); -- 'com'
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2); -- 'www.sqlstudy'
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2); -- 'com.cn'
-- 找不到 delim 回傳整個字串
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1); -- 'www.sqlstudy.com.cn'
SUBSTRING_INDEX(domain, '.', -2) 取主域名SUBSTRING_INDEX 遞迴拆解SUBSTRING_INDEX(path, '/', -1)效能提示:字串函數在 WHERE 條件中會導致全表掃描,若頻繁查詢建議建立函數索引(MySQL 8.0+)或冗餘欄位存儲預計算結果。