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

วิธีกลับลำดับสตริง MySQL ที่เชื่อมด้วย dash (-)

ปัญหา REVERSE() กับสตริงที่มี dash

ฟังก์ชัน REVERSE() จะกลับลำดับทุกตัวอักษรรวมถึง dash ให้ผลลัพธ์ไม่ถูกต้องหากต้องการกลับเฉพาะส่วนที่คั่นด้วย dash

ตัวอย่างปัญหา:

mysql> Select REVERSE('AB-CD-EF');
+---------------------+
| REVERSE('AB-CD-EF') |
+---------------------+
| FE-DC-BA            |
+---------------------+

ผลลัพธ์ที่ต้องการคือ 'EF-CD-AB' (กลับลำดับส่วนที่คั่นด้วย dash)

วิธีแก้: ใช้ SUBSTRING_INDEX() ร่วม INSTR() และ LEFT()/LOCATE()

mysql> Select CONCAT(
    SUBSTRING_INDEX('AB-CD-EF','-',-1), '-',
    substr('AB-CD-EF',instr('AB-CD-EF',"-")+1, instr('AB-CD-EF',"-")),
    LEFT('AB-CD-EF',LOCATE('-','AB-CD-EF')-1)
) As 'Reversed';
+-----------+
| Reversed  |
+-----------+
| EF-CD-AB  |
+-----------+

วิธีนี้จัดการกลับลำดับส่วนที่คั่นด้วย dash ได้ถูกต้อง