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

Dùng REGEXP_REPLACE trong MySQL 8.0+ để loại bỏ số, giữ lại chữ và dấu '/'

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 JohnJohn
101 Carol/400 TaylorCarol/Taylor
101 302 405 Sam/9870Sam/

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àmMô 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.