SUBSTRING_INDEX(str, delim, count) -- str: 源字符串 -- delim: 分隔符 -- count: 正數從左向右數第 count 個分隔符前的內容;負數從右向左數
| 目標 | SQL 寫法 | 結果 | 原理解析 |
|---|---|---|---|
| 第 1 段 | SUBSTRING_INDEX('15,151,152,16', ',', 1) |
15 | 從左數第 1 個逗號前的內容 |
| 第 2 段 | SUBSTRING_INDEX(SUBSTRING_INDEX('15,151,152,16', ',', 2), ',', -1) |
151 | 先取前 2 段 '15,151',再取最後 1 段 |
| 第 3 段 | SUBSTRING_INDEX(SUBSTRING_INDEX('15,151,152,16', ',', -2), ',', 1) |
152 | 從右數第 2 個逗號到末尾 '152,16',再取首段 |
| 第 4 段 | SUBSTRING_INDEX('15,151,152,16', ',', -1) |
16 | 從右數第 1 個逗號後的內容 |
-- 提取第 N 段(N 從 1 開始) -- 正向:先取前 N 段,再取最後 1 段 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', N), ',', -1); -- 逆向:從右數總段數 - N + 1 -- 需先知道總段數或用動態 SQL
SUBSTRING_INDEX 為字符串函數,大數據量下建議:
JSON 類型存儲結構化數組(MySQL 5.7+)