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

ตัดส่วนของสตริงใน MySQL ด้วย SUBSTRING_INDEX และ INSTR

บทนำ

การตัดข้อความก่อน/หลังตัวอักษรเฉพาะ (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)

  1. INSTR(StudentId, '-') - หาตำแหน่งของ Hyphen แรก (คืนค่า 4 สำหรับ 'STU-1011')
  2. INSTR(...) + 1 - ตำแหน่งเริ่มต้นของส่วนที่ต้องการ (หลัง Hyphen) = 5
  3. SUBSTRING(StudentId, 5) - ตัดสตริงตั้งแต่ตำแหน่ง 5 จนจบ → '1011'
  4. 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 ความยาว lenSUBSTRING('Hello', 2, 3) → 'ell'
SUBSTRING_INDEX(str, delim, count)ตัดด้วย DelimiterSUBSTRING_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'