ใช้ SUBSTRING_INDEX ตัดส่วนท้ายหลัง Delimiter แล้ว CONVERT(... UNSIGNED) แปลงเป็นตัวเลข
สร้างตารางและข้อมูล
mysql> CREATE TABLE textIntoNumberDemo (Name VARCHAR(100));
mysql> INSERT INTO textIntoNumberDemo VALUES ('John-11'), ('John-12'), ('John-2'), ('John-4');
Query ดึงตัวเลขและเรียง
mysql> SELECT
-> Name,
-> CONVERT(SUBSTRING_INDEX(Name, '-', -1), UNSIGNED INTEGER) AS MyNumber
-> FROM textIntoNumberDemo
-> ORDER BY MyNumber;
ผลลัพธ์ (เรียงตัวเลข 2, 4, 11, 12):
+---------+----------+ | Name | MyNumber | +---------+----------+ | John-2 | 2 | | John-4 | 4 | | John-11 | 11 | | John-12 | 12 | +---------+----------+
อธิบายฟังก์ชัน
SUBSTRING_INDEX(str, delim, count):count > 0= นับจากซ้าย,count < 0= นับจากขวา ( -1 = ส่วนท้ายสุด)CONVERT(expr, type): แปลง Data Type (UNSIGNED = บวกเท่านั้น, SIGNED = มีเครื่องหมาย)
กรณีซับซ้อนกว่า (หลาย Delimiter)
-- ดึงตัวเลขท้ายสุดจาก 'Product-A-123-B-456' SELECT CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(Name, '-', -1), '-', 1), UNSIGNED) ...
MySQL 8.0+: ใช้ REGEXP_SUBSTR(Name, '[0-9]+$') ดึงตัวเลขท้าย String ได้ง่ายกว่า