ปัญหา 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 ได้ถูกต้อง