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

แยกตัวเลขจากข้อความผสมใน MySQL ด้วย REVERSE และ FORMAT

บทนำ

การแยกเฉพาะตัวเลขจากสตริงที่ผสมตัวอักษรและตัวเลข (เช่น 'John19383' → '19383') สามารถทำได้ด้วยการรวมฟังก์ชัน REVERSE(), FORMAT(), REPLACE() โดยไม่ต้องใช้ REGEXP

ตัวอย่างการสร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (
    -> StudentId VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.71 sec)
mysql> INSERT INTO DemoTable VALUES('John19383');
mysql> INSERT INTO DemoTable VALUES('Carol9999');
mysql> INSERT INTO DemoTable VALUES('David123456');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+-------------+
| StudentId   |
+-------------+
| John19383   |
| Carol9999   |
| David123456 |
+-------------+
3 rows in set (0.00 sec)

คำสั่งแยกตัวเลข (สมมติตัวเลขอยู่ท้ายสตริง)

mysql> SELECT REPLACE(REVERSE(FORMAT(REVERSE(StudentId), 0)), ',', '') AS OnlyDigit
    -> FROM DemoTable;

ผลลัพธ์

+-----------+
| OnlyDigit |
+-----------+
| 19383     |
| 9999      |
| 123456    |
+-----------+
3 rows in set (0.05 sec)

คำอธิบายการทำงาน (Inside-Out)

  1. REVERSE(StudentId) - กลับสตริง: '38391nhoJ'
  2. FORMAT(..., 0) - จัดรูปแบบตัวเลขพร้อมคอมม่า: '38,391' (ทำงานได้เพราะนำหน้าตัวเลข)
  3. REVERSE(...) - กลับกลับมา: '19,383'
  4. REPLACE(..., ',', '') - ลบคอมม่า: '19383'

ข้อจำกัด

  • ทำงานได้ก็ต่อเมื่อตัวเลขอยู่ **ท้ายสตริง** และไม่มีคอมม่าในข้อมูลต้นฉบับ
  • หากตัวเลขอยู่หน้า/กลาง/หลายกลุ่ม วิธีนี้จะไม่ถูกต้อง

วิธีที่ทันสมัยกว่า (MySQL 8.0+)

-- ใช้ REGEXP_REPLACE (MySQL 8.0.4+)
SELECT REGEXP_REPLACE(StudentId, '[^0-9]', '') AS OnlyDigits FROM DemoTable;

-- หรือใช้ REGEXP_SUBSTR
SELECT REGEXP_SUBSTR(StudentId, '[0-9]+$') AS TrailingDigits FROM DemoTable;