MySQL 按指定分隔符擷取字串函式substring_index
阿新 • • 發佈:2018-12-17
1 需求
類別欄位ctgr中的值是連在一起的,入庫時需要分割開來,方便查詢。資料如下所示:
2 方法
使用 MySQL 提供的字串分割函式 SUBSTRING_INDEX 函式可以方便的實現需求。
函式語法:
SUBSTRING_INDEX(str,delim,count) str: 待分割字串 delim:分割符 count: 取到第幾個分割後的子字串
該函式返回分隔符delim的出現次數之前的字串str的子字串。 如果count為正數,則返回最後分隔符左邊的所有內容(從左邊計數)。 如果count為負,則返回最後分隔符右側的所有內容(從右開始計數)。 SUBSTRING INDEX()在搜尋delim時執行區分大小寫的匹配。
SQL示例語句(參照官網)如下:
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -1);
-> 'com'
針對本文的需求:
SUBSTRING_INDEX(ctgr, '-', 1) -- 獲取一級目錄 SUBSTRING_INDEX(SUBSTRING_INDEX(ctgr,'-',2), '-', -1) -- 獲取二級目錄(先獲取前面兩級,然後擷取末位的子串) SUBSTRING_INDEX(ctgr, '-', -1) -- 獲取三級目錄
總的查詢語句如下:
SELECT ctgr, SUBSTRING_INDEX(ctgr,'-', 1) topLevel,
SUBSTRING_INDEX(SUBSTRING_INDEX(ctgr,'-',2),'-',-1) secondLevel,
SUBSTRING_INDEX(ctgr,'-', -1) thirdLevel
from person ;
查詢結果如下:
最後更新到對應的欄位:
UPDATE person SET topCtgr=SUBSTRING_INDEX(ctgr,'-', 1); UPDATE person SET secCtgr=SUBSTRING_INDEX(SUBSTRING_INDEX(ctgr,'-',2),'-',-1); UPDATE person SET thdCtgr=SUBSTRING_INDEX(ctgr,'-', -1);