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):
REPLACE(Number, '-', ''): Xóa dấu gạch ngangREPLACE(..., ' ', ''): Xóa khoảng trắngREPLACE(..., '"', ''): Xóa dấu ngoặc képREPLACE(..., ',', ''): 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).