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

MySQL 字串截取與拆分函數實戰:SUBSTRING 與 SUBSTRING_INDEX 進階用法

     編輯:MySQL 綜合教學

一、SUBSTRING:靈活截取子字串

-- 從第 9 字元截取到結尾
SUBSTRING(commentid, 9)

-- 完整語法:SUBSTRING(str, pos[, len])
-- pos 為正:從左往右數;為負:從右往左數(倒數)
-- len 省略則截取到結尾

範例:SUBSTRING('content_13-11220-1', 9) → '13-11220-1'

二、SUBSTRING_INDEX:依分隔符拆分並取段

SUBSTRING_INDEX(str, delim, count)
-- count > 0:從左往右,取第 count 個分隔符之前的所有內容
-- count < 0:從右往左,取倒數第 |count| 個分隔符之後的所有內容

實戰範例:字串 'c-11065-50'

目標SQL結果
取最後一段 50SUBSTRING_INDEX(str, '-', -1)50
取中間段 11065SUBSTRING_INDEX(SUBSTRING_INDEX(str, '-', -2), '-', 1)11065
同樣取中間段(另寫法)SUBSTRING_INDEX(SUBSTRING_INDEX(str, '-', 2), '-', -1)11065

進階組合:從 'content_13-11220-1' 取出 13

-- 寫法 A:三層巢狀(較慢)
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING(commentid, 9), '-', 1), '-', -1)

-- 寫法 B:兩層巢狀(推薦,效能較好)
SUBSTRING_INDEX(SUBSTRING_INDEX(commentid, '-', 1), '_', -1)
-- 邏輯:先按 '-' 取第一段 'content_13',再按 '_' 取最後段 '13'

三、效能優化提示

  • 大數據量下,減少函數巢狀層數 可顯著降低 CPU 開銷。
  • 若頻繁在 WHERE/ORDER BY 中使用,建議新增虛擬欄位 或 生成列 並建索引(MySQL 5.7+)。
  • 避免在 WHERE 條件對欄位做函數運算,導致索引失效。

四、常用字串函數速查

函數用途
LEFT(str, len) / RIGHT(str, len)左/右定長截取
LOCATE(substr, str[, pos])尋找子字串位置
REPLACE(str, from, to)替換字串
TRIM([BOTH|LEADING|TRAILING] rem FROM str)去除空白/指定字元
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved