MySQL 8.0 hỗ trợ REGEXP_REPLACE(str, pattern, replacement) thay thế chuỗi khớp regex — mạnh hơn REPLACE() thường.
Ví dụ minh họa
Tạo bảng mã sinh viên có lẫn số:
CREATE TABLE DemoTable1595 (StudentCode VARCHAR(50));
INSERT INTO DemoTable1595 VALUES
('200 John'), ('101 Carol/400 Taylor'), ('101 302 405 Sam/9870');
Loại bỏ tất cả số (kể cả số trong dấu gạch chéo), giữ lại chữ và /:
SELECT REGEXP_REPLACE(StudentCode, ' *[0-9]+([.,][0-9]+)?(/[0-9]+([.,][0-9]+)?)? *', '') AS GetOnlyStringAndSlash FROM DemoTable1595;
Kết quả
| StudentCode (gốc) | GetOnlyStringAndSlash |
|---|---|
| 200 John | John |
| 101 Carol/400 Taylor | Carol/Taylor |
| 101 302 405 Sam/9870 | Sam/ |
Giải thích pattern regex
*[0-9]+([.,][0-9]+)?(/[0-9]+([.,][0-9]+)?)? *
*: Khoảng trắng tùy chọn trước.[0-9]+: Số nguyên (1+ chữ số).([.,][0-9]+)?: Phần thập phân tùy chọn (. hoặc ,).(/[0-9]+([.,][0-9]+)?)?: Phần sau dấu / (cũng có thể có thập phân) — tùy chọn.*: Khoảng trắng tùy chọn sau.
→ Khớp: 200, 101, 400, 302, 405, 9870, 101/... (phần số).
Các hàm REGEXP mới MySQL 8.0
| Hàm | Mô tả |
|---|---|
REGEXP_LIKE(str, pat) | Boolean: khớp pattern? |
REGEXP_SUBSTR(str, pat) | Trích xuất chuỗi khớp đầu tiên |
REGEXP_INSTR(str, pat) | Vị trí khớp đầu tiên |
REGEXP_REPLACE(str, pat, repl) | Thay thế tất cả khớp pattern |
Lưu ý
- Chỉ MySQL 8.0.4+.
- Regex dùng ICU library (tương thích Perl/PCRE).
- Hiệu năng: Chậm hơn REPLACE() đơn giản. Chỉ dùng khi cần pattern phức tạp.