Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ค้นหาฐานข้อมูล MySQL ที่ชื่อมีตัวพิมพ์ใหญ่หลังคำหนดด้วย REGEXP

ใช้ 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