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

Tìm database MySQL có tên chứa chữ in hoa sau tiền tố cụ thể (REGEXP)

Vấn đề: Lọc tên database theo pattern: tiền tố + chữ in hoa

Cần tìm các database có tên bắt đầu bằng 'bank_' theo sau là chữ in hoa (ví dụ: bank_APP1, bank_APP2).

Giải pháp: REGEXP trên information_schema.schemata

Bảng hệ thống information_schema.schemata cột SCHEMA_NAME lưu tên database.

1. Tạo database test

CREATE DATABASE bank_APP1;
CREATE DATABASE bank_APP2;
CREATE DATABASE bank_APP3;

2. Truy vấn REGEXP

SELECT * FROM information_schema.schemata 
WHERE SCHEMA_NAME REGEXP '^bank_+[A-Z]';

3. Giải thích regex

  • ^ – Bắt đầu chuỗi.
  • bank_ – Chuỗi cố định 'bank_'.
  • + – Quantifier: ký tự trước ('_') xuất hiện 1 hoặc nhiều lần. Lưu ý: Pattern gốc '^bank_+[A-Z]' khớp 'bank_APP1' (một '_'), 'bank__APP1' (hai '_')...
  • [A-Z] – Một chữ cái in hoa A-Z.

4. Kết quả

+--------------+-------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+-------------+----------------------------+------------------------+----------+
| def          | bank_app1   | utf8                       | utf8_unicode_ci        | NULL     |
| def          | bank_app2   | utf8                       | utf8_unicode_ci        | NULL     |
| def          | bank_app3   | utf8                       | utf8_unicode_ci        | NULL     |
+--------------+-------------+----------------------------+------------------------+----------+

Lưu ý: MySQL mặc định collation utf8_general_ci hoặc utf8mb4_0900_ai_ci – không phân biệt chữ hoa/thường. Do đó REGEXP '[A-Z]' cũng khớp 'app1' (chữ thường). Kết quả hiển thị tên database lowercase.

Để phân biệt chữ hoa/thường (Case-sensitive)

  • Dùng collation case-sensitive: WHERE SCHEMA_NAME COLLATE utf8mb4_bin REGEXP '^bank_+[A-Z]'.
  • Hoặc MySQL 8.0+: REGEXP BINARY (nếu hỗ trợ).

Cách thực tế hơn: Tìm database có tiền tố 'bank_' (bất kỳ chữ cái sau)

SELECT SCHEMA_NAME FROM information_schema.schemata 
WHERE SCHEMA_NAME LIKE 'bank\_%' ESCAPE '\\';

Dùng LIKE với escape \_ (dấu gạch dưới là wildcard trong LIKE).