Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดึงส่วนของสตริงตามตัวคั่นใน MySQL

ใช้ SUBSTRING_INDEX() 巢狀 (Nested) เพื่อดึงส่วนที่ N ของสตริงที่คั่นด้วยตัวคั่น

ไวยากรณ์

SUBSTRING_INDEX(SUBSTRING_INDEX(column, delimiter, N), delimiter, -1)
  • Inner: ดึงส่วนแรก N ส่วน (รวมตัวคั่น)
  • Outer: ดึงส่วนสุดท้ายจากผลลัพธ์ Inner (คือส่วนที่ N)

ตัวอย่าง: ดึงส่วนที่ 3 (นับจากซ้าย) คั่นด้วย /

1. สร้างตารางและข้อมูล

mysql> create table DemoTable (Code varchar(100));
mysql> insert into DemoTable values('/101/102/106'), ('/110/111/101'), ('/111/114/201'), ('/111/118');

2. Query ดึงส่วนที่ 3

mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 3), '/', -1) FROM DemoTable;

ผลลัพธ์

+-----------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 3), '/', -1) |
+-----------------------------------------------------+
| 102                                                 |
| 111                                                 |
| 114                                                 |
| 118                                                 |
+-----------------------------------------------------+

การประยุกต์: ดึงส่วนที่ N แบบ Dynamic

-- สร้าง Function สำหรับดึงส่วนที่ N
CREATE FUNCTION GET_TOKEN(str TEXT, delim VARCHAR(10), n INT)
RETURNS TEXT
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(str, delim, n), delim, -1);

-- ใช้งาน
SELECT GET_TOKEN(Code, '/', 3) FROM DemoTable;

MySQL 8.0+ ใช้ JSON_TABLE (สำหรับคั่นจุลภาค)

SELECT jt.val FROM DemoTable, 
JSON_TABLE(CONCAT('["', REPLACE(Code, '/', '","'), '"]'), "$[*]" COLUMNS(val VARCHAR(100) PATH "$")) AS jt;