萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 字串截取函數大全:LEFT/RIGHT/SUBSTRING/SUBSTRING_INDEX 參數詳解與實戰範例

函數速查表

函數語法說明
LEFTLEFT(str, len)從左側截取 len 字元
RIGHTRIGHT(str, len)從右側截取 len 字元
SUBSTRINGSUBSTRING(str, pos[, len])從位置 pos 開始截取 len 字元,pos 可為負數(從右數)
SUBSTRING_INDEXSUBSTRING_INDEX(str, delim, count)按分隔符 delim 截取第 count 次出現前/後的子串,count>0 取左邊,count<0 取右邊

詳細範例

1. LEFT(str, len)

SELECT LEFT('111cn.net', 3);  -- '111'

2. RIGHT(str, len)

SELECT RIGHT('111cn.net', 3);  -- 'net'

3. SUBSTRING(str, pos[, len])

-- 從第 4 字元開始到結束
SELECT SUBSTRING('111cn.net', 4);        -- 'cn.net'

-- 從第 4 字元開始取 2 字元
SELECT SUBSTRING('111cn.net', 4, 2);     -- 'cn'

-- 從倒數第 4 字元開始到結束
SELECT SUBSTRING('111cn.net', -4);       -- '.net'

-- 從倒數第 4 字元開始取 2 字元
SELECT SUBSTRING('111cn.net', -4, 2);    -- '.n'

-- 注意:len 不能為負數

4. SUBSTRING_INDEX(str, delim, count)

-- 取第 2 個 '.' 之前的部分
SELECT SUBSTRING_INDEX('www.111cn.net', '.', 2);   -- 'www.111cn'

-- 取最後一個 '.coc' 之前的部分(找不到分隔符返回整串)
SELECT SUBSTRING_INDEX('www.111cn.net', '.coc', 1); -- 'www.111cn.net'

-- 負數 count:從右側計數
SELECT SUBSTRING_INDEX('www.111cn.net', '.', -1);  -- 'net'
SELECT SUBSTRING_INDEX('www.111cn.net', '.', -2);  -- '111cn.net'

進階組合技巧

取域名主體(去 www. 和 尾綴)

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.111cn.net', '.', 2), '.', -1);  -- '111cn'

解析 URL 路徑最後一段

SELECT SUBSTRING_INDEX('https://example.com/path/to/file.html', '/', -1);  -- 'file.html'

配合 REPLACE 清理後再截取

SELECT SUBSTRING_INDEX(REPLACE(url, 'https://', ''), '/', 1) FROM logs;  -- 取域名

效能與注意事項

  • 所有函數均為字元級操作,多位元組字元集(UTF-8)下正確按字元計算
  • 大量資料處理時,避免在 WHERE 條件中對大欄位使用這些函數(導致全表掃描),改用應用層處理或建立函數索引 (MySQL 8.0+)
  • SUBSTRING_INDEX 若分隔符不存在,count>0 返回整串,count<0 返回空串
copyright © 萬盛學電腦網 all rights reserved