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

การเรียงลำดับ String ที่ผสมตัวเลขใน MySQL

Natural Sort / Alphanumeric Sort ใน MySQL

การเรียง STRING ที่มีตัวเลขผสม (เช่น '2J John has 9' vs '2J John has 58') ใช้ REGEXP_REPLACE (MySQL 8.0+) เพื่อลบตัวเลขท้าย แล้วเรียงตามความยาวและค่าอักษร

คำสั่ง

SELECT * FROM demo18
ORDER BY 
    REGEXP_REPLACE(value, '[0-9]*$', ''),
    LENGTH(value),
    value;

ตัวอย่างข้อมูล

INSERT INTO demo18 VALUES
('John Smith'), ('2J John has 58'), ('2J John has 9');

ผลลัพธ์

value
2J John has 9
2J John has 58
John Smith

คำอธิบาย:

  1. REGEXP_REPLACE(value, '[0-9]*$', '') ลบตัวเลขท้ายสตริง → '2J John has ', '2J John has ', 'John Smith'
  2. LENGTH(value) เรียงตามความยาว (สั้นกว่าก่อน)
  3. value เรียงตามตัวอักษร

หมายเหตุ: REGEXP_REPLACE ต้องการ MySQL 8.0+ เวอร์ชันเก่าใช้ SUBSTRING_INDEX หรือ Logic อื่นซับซ้อนกว่า