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

ดึงตัวเลขจาก String ใน MySQL (CONVERT + SUBSTRING_INDEX)

ใช้ 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 ได้ง่ายกว่า