1. 程式人生 > >MySQL 按指定分隔符擷取字串函式substring_index

MySQL 按指定分隔符擷取字串函式substring_index

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);