การหาค่าตัวเลขสูงสุดจากสตริงที่มี Prefix ใน MySQL
ใช้ SUBSTRING() แยกส่วนตัวเลข แล้ว CAST() เป็นตัวเลข ก่อนหา MAX()
ตัวอย่างการใช้งาน
สร้างตารางรหัสหนังสือ (Prefix STU + ตัวเลข):
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentBookCode varchar(200)
);
mysql> insert into DemoTable(StudentBookCode) values('STU201');
mysql> insert into DemoTable(StudentBookCode) values('STU202');
mysql> insert into DemoTable(StudentBookCode) values('STU203');
mysql> insert into DemoTable(StudentBookCode) values('STU290');
mysql> insert into DemoTable(StudentBookCode) values('STU234');
ข้อมูล:
+----+-----------------+ | Id | StudentBookCode | +----+-----------------+ | 1 | STU201 | | 2 | STU202 | | 3 | STU203 | | 4 | STU290 | | 5 | STU234 | +----+-----------------+
คิวรีหาตัวเลขสูงสุด (ข้าม 3 ตัวอักษรแรก "STU"):
mysql> select MAX(CAST(SUBSTRING(StudentBookCode FROM 4) AS UNSIGNED)) from DemoTable;
+----------------------------------------------------------+ | MAX(CAST(SUBSTRING(StudentBookCode FROM 4) AS UNSIGNED)) | +----------------------------------------------------------+ | 290 | +----------------------------------------------------------+
การทำงาน:
SUBSTRING(StudentBookCode FROM 4)- ดึงสตริงตั้งแต่ตำแหน่งที่ 4 (นับจาก 1) คือตัวเลขCAST(... AS UNSIGNED)- แปลงเป็นตัวเลขบวกเพื่อเปรียบเทียบได้ถูกต้องMAX()- หาค่าสูงสุด
กรณี Prefix ความยาวไม่คงที่: ใช้ SUBSTRING_INDEX หรือ REGEXP (MySQL 8.0) แยกตัวเลข
-- MySQL 8.0: ใช้ REGEXP_SUBSTR SELECT MAX(CAST(REGEXP_SUBSTR(StudentBookCode, '[0-9]+$') AS UNSIGNED)) FROM DemoTable;