บทนำ
การตัดข้อความก่อน/หลังตัวอักษรเฉพาะ (Delimiter) เช่น Hyphen (-) ใน MySQL สามารถใช้ SUBSTRING_INDEX() ร่วมกับ INSTR() และ SUBSTRING()
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> StudentId VARCHAR(100)
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO DemoTable VALUES('STU-1011');
mysql> INSERT INTO DemoTable VALUES('STU-95968686');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+--------------+
| StudentId |
+--------------+
| STU-1011 |
| STU-95968686 |
+--------------+
2 rows in set (0.00 sec)
คำสั่งตัดส่วนหลัง Hyphen (เก็บเฉพาะตัวเลข)
mysql> SELECT SUBSTRING_INDEX(SUBSTRING(StudentId, INSTR(StudentId, '-') + 1), ' ', 1)
-> FROM DemoTable;
ผลลัพธ์
+------------------------------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING(StudentId, INSTR(StudentId, '-') + 1), ' ', 1) |
+------------------------------------------------------------------------+
| 1011 |
| 95968686 |
+------------------------------------------------------------------------+
2 rows in set (0.02 sec)
คำอธิบายการทำงาน (Inside-Out)
INSTR(StudentId, '-')- หาตำแหน่งของ Hyphen แรก (คืนค่า 4 สำหรับ 'STU-1011')INSTR(...) + 1- ตำแหน่งเริ่มต้นของส่วนที่ต้องการ (หลัง Hyphen) = 5SUBSTRING(StudentId, 5)- ตัดสตริงตั้งแต่ตำแหน่ง 5 จนจบ →'1011'SUBSTRING_INDEX(..., ' ', 1)- ดึงส่วนแรกก่อน Space (ป้องกันกรณีมี Space ต่อท้าย) →'1011'
วิธีง่ายกว่า: ใช้ SUBSTRING_INDEX โดยตรง
-- ส่วนหลัง Hyphen ตัวแรก (หรือตัวสุดท้ายถ้ามีแค่ตัวเดียว)
SELECT SUBSTRING_INDEX(StudentId, '-', -1) FROM DemoTable;
ผลลัพธ์เหมือนกัน
+----------------------------------+
| SUBSTRING_INDEX(StudentId, '-', -1) |
+----------------------------------+
| 1011 |
| 95968686 |
+----------------------------------+
2 rows in set (0.00 sec)
สรุปฟังก์ชันตัดสตริงใน MySQL
| ฟังก์ชัน | ใช้สำหรับ | ตัวอย่าง |
|---|---|---|
| SUBSTRING(str, pos, len) | ตัดจากตำแหน่ง pos ความยาว len | SUBSTRING('Hello', 2, 3) → 'ell' |
| SUBSTRING_INDEX(str, delim, count) | ตัดด้วย Delimiter | SUBSTRING_INDEX('a-b-c', '-', -1) → 'c' |
| LEFT(str, len) | ตัดซ้าย len ตัว | LEFT('Hello', 2) → 'He' |
| RIGHT(str, len) | ตัดขวา len ตัว | RIGHT('Hello', 2) → 'lo' |
| TRIM(str) | ตัด Space นำหน้า/ท้าย | TRIM(' Hi ') → 'Hi' |