วิธีที่ง่ายที่สุดในการลบส่วนต่อท้ายหลังเครื่องหมาย - (เช่น Zip Code รูปแบบ 52533-909) คือใช้ฟังก์ชัน SUBSTRING_INDEX()
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
ZipCode varchar(50) );
Query OK, 0 rows affected (2.02 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('52533-909'); Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('12345-674'); Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('89893-890'); Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('AAAAA-783'); Query OK, 1 row affected (0.25 sec)
แสดงข้อมูลก่อนแก้ไข
mysql> select *from DemoTable;
+-----------+ | ZipCode | +-----------+ | 52533-909 | | 12345-674 | | 89893-890 | | AAAAA-783 | +-----------+ 4 rows in set (0.00 sec)
คิวรี่อัปเดตลบส่วนหลัง -
mysql> update DemoTable set ZipCode=substring_index(ZipCode, '-', 1); Query OK, 4 rows affected (0.44 sec) Rows matched: 4 Changed: 4 Warnings: 0
ตรวจสอบผลลัพธ์
mysql> select *from DemoTable;
+---------+ | ZipCode | +---------+ | 52533 | | 12345 | | 89893 | | AAAAA | +---------+ 4 rows in set (0.00 sec)
คำอธิบาย SUBSTRING_INDEX
SUBSTRING_INDEX(str, delim, count)count > 0คืนคาส่วนซ้ายสุด count ส่วน (นับจากซ้าย)count < 0คืนคาส่วนขวาสุด |count| ส่วน (นับจากขวา)- ตัวอย่าง:
SUBSTRING_INDEX('a-b-c', '-', 1)= 'a',SUBSTRING_INDEX('a-b-c', '-', -1)= 'c'
วิธีทางเลือกอื่น
LEFT(ZipCode, LOCATE('-', ZipCode) - 1)- ใช้ LEFT และ LOCATESUBSTRING(ZipCode, 1, INSTR(ZipCode, '-') - 1)- ใช้ SUBSTRING และ INSTRREPLACE(ZipCode, SUBSTRING_INDEX(ZipCode, '-', -1), '')- แทนที่ส่วนท้าย
ข้อควรระวัง
คิวรี่ UPDATE นี้จะเปลี่ยนข้อมูลถาวร ควรสำรองข้อมูล (BACKUP) หรือทดสอบด้วย SELECT ก่อน