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

Trích xuất chỉ số từ trường text trong MySQL với REPLACE lồng nhau

Loại bỏ ký tự không phải số từ chuỗi text trong MySQL

Sử dụng REPLACE() lồng nhau nhiều lần để xóa các ký tự không mong muốn (dấu gạch ngang, khoảng trắng, dấu phẩy, ngoặc...) chỉ giữ lại chữ số.

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

mysql> CREATE TABLE DemoTable (Number TEXT);
mysql> INSERT INTO DemoTable VALUES ('7364746464,-'), ('-,8909094556');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+--------------+
| Number       |
+--------------+
| 7364746464,- |
| -,8909094556 |
+--------------+

3. Truy vấn: Loại bỏ '-', ' ', '"', ','

mysql> SELECT REPLACE(REPLACE(REPLACE(REPLACE(Number, '-', ''), ' ', ''), '"', ''), ',', '') AS Result
    FROM DemoTable;

4. Kết quả

+------------+
| Result     |
+------------+
| 7364746464 |
| 8909094556 |
+------------+

Giải thích chuỗi REPLACE lồng nhau (thực thi từ trong ra ngoài):

  1. REPLACE(Number, '-', ''): Xóa dấu gạch ngang
  2. REPLACE(..., ' ', ''): Xóa khoảng trắng
  3. REPLACE(..., '"', ''): Xóa dấu ngoặc kép
  4. REPLACE(..., ',', ''): Xóa dấu phẩy

Hạn chế: Cố định danh sách ký tự cần xóa. Không xử lý được ký tự khác (chấm, slash, chữ cái...).

Cách hiện đại hơn (MySQL 8.0+): Dùng REGEXP_REPLACE() (cần cài plugin) hoặc xử lý ở application layer.

Workaround chỉ giữ số (MySQL 8.0):

SELECT REGEXP_SUBSTR(Number, '[0-9]+') FROM DemoTable;

Chỉ lấy chuỗi số đầu tiên. Để lấy tất cả số ghép lại: cần stored function hoặc ứng dụng.

Lưu ý: Kết quả trả về kiểu TEXT. Muốn dùng như số: CAST(... AS UNSIGNED).