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

การลบส่วนต่อท้าย -XXX จากรหัสไปรษณีย์ด้วย SUBSTRING_INDEX ใน MySQL

วิธีที่ง่ายที่สุดในการลบส่วนต่อท้ายหลังเครื่องหมาย - (เช่น 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 และ LOCATE
  • SUBSTRING(ZipCode, 1, INSTR(ZipCode, '-') - 1) - ใช้ SUBSTRING และ INSTR
  • REPLACE(ZipCode, SUBSTRING_INDEX(ZipCode, '-', -1), '') - แทนที่ส่วนท้าย

ข้อควรระวัง

คิวรี่ UPDATE นี้จะเปลี่ยนข้อมูลถาวร ควรสำรองข้อมูล (BACKUP) หรือทดสอบด้วย SELECT ก่อน