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

ค้นหาตัวอักษรพิมพ์ใหญ่ (Capital Letters) ใน MySQL ด้วย REGEXP BINARY


คำสั่งหลัก

ใช้ REGEXP BINARY เพื่อ case-sensitive regex matching

รูปแบบคำสั่ง

SELECT * FROM yourTableName 
WHERE yourColumnName REGEXP BINARY '[A-Z]{2}';

ตัวอย่างครบถ้วน

1. สร้างตาราง

mysql> create table FindCapitalLettrsDemo 
    -> ( 
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> StudentFirstName varchar(20) 
    -> ); 
Query OK, 0 rows affected (0.52 sec)

2. เพิ่มข้อมูลผสม case

mysql> insert into FindCapitalLettrsDemo(StudentFirstName) values('JOHN'); 
Query OK, 1 row affected (0.24 sec)
mysql> insert into FindCapitalLettrsDemo(StudentFirstName) values('Carol'); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into FindCapitalLettrsDemo(StudentFirstName) values('bob'); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into FindCapitalLettrsDemo(StudentFirstName) values('carol'); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into FindCapitalLettrsDemo(StudentFirstName) values('John'); 
Query OK, 1 row affected (0.14 sec)

3. ดูข้อมูลทั้งหมด

mysql> select * from FindCapitalLettrsDemo;
+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1         | JOHN             |
| 2         | Carol            |
| 3         | bob              |
| 4         | carol            |
| 5         | John             |
+-----------+------------------+

4. ค้นหาชื่อที่มีตัวพิมพ์ใหญ่ติดกัน 2 ตัวขึ้นไป

mysql> select * from FindCapitalLettrsDemo 
    -> where StudentFirstName REGEXP BINARY '[A-Z]{2}';
+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1         | JOHN             |
+-----------+------------------+

เฉพาะ 'JOHN' ที่มีตัวพิมพ์ใหญ่ติดกัน 4 ตัว (J,O,H,N)

Regex Patterns สำหรับ Capital Letters

PatternความหมายMatch ตัวอย่าง
[A-Z]มีตัวพิมพ์ใหญ่อย่างน้อย 1 ตัวJohn, JOHN, jOhn
[A-Z]{2,}มีตัวพิมพ์ใหญ่ติดกัน 2+ ตัวJOHN, McDonald
^[A-Z]ขึ้นต้นด้วยตัวพิมพ์ใหญ่John, Carol
^[A-Z]+$ทั้งหมดเป็นตัวพิมพ์ใหญ่JOHN, USA
[A-Z][a-z]+ขึ้นต้นใหญ่ ตามด้วยเล็ก (Title Case)John, Carol

CASE SENSITIVE vs INSENSITIVE

  • REGEXP BINARY - case sensitive (แยกใหญ่/เล็ก)
  • REGEXP - case insensitive (default, ขึ้นกับ collation)
  • COLLATE utf8mb4_bin - บังคับ case sensitive ใน comparison ทุกชนิด

Performance Note

REGEXP ไม่ใช้ index ได้ (full table scan) ตารางใหญ่ควร:

  • เพิ่ม computed column / generated column เก็บ flag
  • ใช้ Full-text search หรือ application-level filtering
  • MySQL 8.0: ใช้ REGEXP_REPLACE() แทน (เร็วกว่า)