เมื่อต้องการลบส่วนท้ายที่เป็นตัวเลขในวงเล็บ (เช่น ' (7)') ออกจากสตริง ใช้ SUBSTRING ร่วมกับ LOCATE บนสตริงที่ REVERSE แล้ว เพื่อหาตำแหน่งวงเล็บเปิดจากท้าย
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Name varchar(100) );
Query OK, 0 rows affected (0.80 sec)
เพิ่มข้อมูลมี/ไม่มี ตัวเลขในวงเล็บ
mysql> insert into DemoTable values('1stJohn');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('1stJohn (7)');
Query OK, 1 row affected (0.65 sec)
mysql> insert into DemoTable values('2ndSam');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2ndSam (4)');
Query OK, 1 row affected (0.15 sec)
แสดงข้อมูลก่อนลบ
mysql> select * from DemoTable;
+-------------+ | Name | +-------------+ | 1stJohn | | 1stJohn (7) | | 2ndSam | | 2ndSam (4) | +-------------+ 4 rows in set (0.00 sec)
คำสั่ง SELECT ตัดทิ้งส่วนในวงเล็บ
mysql> select trim(substring(Name, 1,
(CHAR_LENGTH(Name) - LOCATE('(', REVERSE(Name)))))
AS RemovingTrailingNumbers from DemoTable;
ผลลัพธ์ (เหลือแค่ชื่อ)
+-------------------------+ | RemovingTrailingNumbers | +-------------------------+ | 1stJohn | | 1stJohn | | 2ndSam | | 2ndSam | +-------------------------+ 4 rows in set (0.00 sec)
คำอธิบายขั้นตอน:
REVERSE(Name)- กลับสตริง (เช่น ')7( nhoJts1')LOCATE('(', REVERSE(Name))- หาตำแหน่ง '(' ในสตริงที่กลับ = ระยะห่างจากท้ายCHAR_LENGTH(Name) - ...- คำนวณตำแหน่งก่อนวงเล็บในสตริงต้นฉบับSUBSTRING(Name, 1, ...)- ตัดเอาเฉพาะส่วนหน้าTRIM()- ลบช่องว่างที่อาจเหลืออยู่
วิธีง่ายกว่า (MySQL 8.0+): ใช้ REGEXP_REPLACE(Name, ' \\([0-9]+\\)$', '') ลบรูปแบบ " (ตัวเลข)" ท้ายสตริงโดยตรง