บทนำ
การแยกส่วนข้อความหลัง Delimiter ตัวสุดท้าย (เช่น Hyphen '-') ใช้ฟังก์ชัน SUBSTRING_INDEX() ด้วยพารามิเตอร์ count = -1
รูปแบบการใช้งาน
SELECT SUBSTRING_INDEX(yourColumnName, '-', -1) AS AliasName FROM yourTableName;
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> StreetName TEXT
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO DemoTable VALUES('Paris Hill St.-CA-83745646');
mysql> INSERT INTO DemoTable VALUES('502 South Armstrong Street-9948443');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+------------------------------------+
| StreetName |
+------------------------------------+
| Paris Hill St.-CA-83745646 |
| 502 South Armstrong Street-9948443 |
+------------------------------------+
2 rows in set (0.00 sec)
คำสั่งแยกส่วนหลัง Hyphen ตัวสุดท้าย
mysql> SELECT SUBSTRING_INDEX(StreetName, '-', -1) AS Split FROM DemoTable;
ผลลัพธ์
+----------+
| Split |
+----------+
| 83745646 |
| 9948443 |
+----------+
2 rows in set (0.00 sec)
คำอธิบาย
SUBSTRING_INDEX(str, delim, count)count > 0: นับ Delimiter จากซ้าย, คืนค่าส่วนก่อน Delimiter ตัวที่ countcount < 0: นับ Delimiter จากขวา, คืนค่าส่วนหลัง Delimiter ตัวที่ |count|count = -1: ส่วนหลัง Delimiter ตัวสุดท้าย (Rightmost)
ตัวอย่างเพิ่มเติม
-- ข้อมูล: 'a-b-c-d'
SUBSTRING_INDEX('a-b-c-d', '-', 1) -- 'a' (ส่วนก่อน - ตัวแรก)
SUBSTRING_INDEX('a-b-c-d', '-', 2) -- 'a-b' (ส่วนก่อน - ตัวที่ 2)
SUBSTRING_INDEX('a-b-c-d', '-', 3) -- 'a-b-c' (ส่วนก่อน - ตัวที่ 3)
SUBSTRING_INDEX('a-b-c-d', '-', -1) -- 'd' (ส่วนหลัง - ตัวสุดท้าย)
SUBSTRING_INDEX('a-b-c-d', '-', -2) -- 'c-d' (ส่วนหลัง - ตัวที่ 2 จากท้าย)
SUBSTRING_INDEX('a-b-c-d', '-', -3) -- 'b-c-d' (ส่วนหลัง - ตัวที่ 3 จากท้าย)
การประยุกต์: ดึงนามสกุลไฟล์ (File Extension)
SELECT SUBSTRING_INDEX(FileName, '.', -1) AS Extension FROM Files;