ใช้ REGEXP กับ information_schema.schemata เพื่อกรองชื่อฐานข้อมูลที่ตรงรูปแบบ (Pattern)
รูปแบบคำสั่ง
SELECT * FROM information_schema.schemata WHERE SCHEMA_NAME REGEXP '^yourPrefix_+[A-Z]';
ตัวอย่างการใช้งาน
สร้างฐานข้อมูลทดสอบ:
mysql> create database bank_APP1; mysql> create database bank_APP2; mysql> create database bank_APP3;
ค้นหาชื่อขึ้นต้นด้วย 'bank_' แล้วตามด้วยตัวพิมพ์ใหญ่:
mysql> select * from information_schema.schemata
-> WHERE SCHEMA_NAME REGEXP '^bank_+[A-Z]';
ผลลัพธ์ (MySQL แปลงชื่อเป็น lowercase อัตโนมัติในบางระบบ):
+--------------+-------------+----------------------------+------------------------+----------+ | 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 | +--------------+-------------+----------------------------+------------------------+----------+ 3 rows in set (0.00 sec)
คำอธิบาย REGEXP
^bank_: เริ่มต้นด้วย 'bank_'_+: ตัว underscore หนึ่งขึ้นไป[A-Z]: ตัวอักษรพิมพ์ใหญ่ A-Z หนึ่งตัว
ข้อสังเกตสำคัญ
MySQL คืนค่า SCHEMA_NAME เป็น lowercase เสมอ (ขึ้นกับ collation และ lower_case_table_names setting) ดังนั้น [A-Z] ในตัวอย่างอาจไม่จับได้จริง ควรใช้:
REGEXP '^bank_[a-z]+[A-Z]'(ถ้าตรวจสอบ pattern ตรงๆ)- หรือ
REGEXP BINARY '^bank_.*[A-Z]'(Case-sensitive matching) - ตัวอย่างในบทความอาจเป็นการสาธิต Pattern นิยาม ไม่ใช่ผลลัพธ์จริงจาก Case-sensitive search