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

หาค่าสูงสุดจากสตริงที่ผสมตัวเลขใน MySQL

การหาค่าตัวเลขสูงสุดจากสตริงที่มี 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                                                      |
+----------------------------------------------------------+

การทำงาน:

  1. SUBSTRING(StudentBookCode FROM 4) - ดึงสตริงตั้งแต่ตำแหน่งที่ 4 (นับจาก 1) คือตัวเลข
  2. CAST(... AS UNSIGNED) - แปลงเป็นตัวเลขบวกเพื่อเปรียบเทียบได้ถูกต้อง
  3. 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;