Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Trích xuất số từ chuỗi dài phân cách bằng gạch dưới/dấu chấm trong MySQL

Vấn đề: Parse chuỗi phức tạp để lấy số nhúng giữa các đoạn text

Chuỗi: 'You_can_remove_the_string_part_only-10001-But_You_can_not_remove_the_numeric_parts'. Cần lấy số 10001.

Giải pháp: REPLACE lồng nhau + CAST

Loại bỏ phần tiền tố và hậu tố cố định, chuyển phần còn lại thành số.

1. Tạo bảng và dữ liệu

CREATE TABLE DemoTable (Title TEXT);
INSERT INTO DemoTable VALUES 
('You_can_remove_the_string_part_only-10001-But_You_can_not_remove_the_numeric_parts');

2. Truy vấn trích xuất số

SELECT CAST(
    REPLACE(
        REPLACE(Title, 
            'You_can_remove_the_string_part_only-', ''), 
        '-But_You_can_not_remove_the_numeric_parts', ''
    ) AS UNSIGNED
) AS Output 
FROM DemoTable;

3. Giải thích

  1. REPLACE(Title, 'prefix-', '') – Xóa tiền tố cố định.
  2. REPLACE(..., '-suffix', '') – Xóa hậu tố cố định.
  3. CAST(... AS UNSIGNED) – Chuyển chuỗi số thành kiểu số nguyên.

4. Kết quả

+--------+
| Output |
+--------+
|  10001 |
+--------+

Cách tổng quát hơn (MySQL 8.0+): REGEXP_SUBSTR

SELECT CAST(REGEXP_SUBSTR(Title, '[0-9]+') AS UNSIGNED) AS Output 
FROM DemoTable;
  • REGEXP_SUBSTR(str, pattern) – Trả về chuỗi con khớp regex đầu tiên.
  • '[0-9]+' – Dãy số liên tiếp đầu tiên.
  • Lin hoạt hơn, không cần biết tiền tố/hậu tố chính xác.

Lưu ý

  • Cách REPLACE chỉ dùng khi format chuỗi rất cố định.
  • Dữ liệu thực tế thường không đều đặn – ưu tiên REGEXP hoặc xử lý ở application layer.
  • MySQL < 8.0 không có REGEXP_SUBSTR – phải dùng REPLACE/SUBSTRING_INDEX phức tạp.