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

ใช้ REGEXP จับคู่ End-of-line ทางเลือกหลังแต่ละเรคคอร์ดใน MySQL

Regex Pattern สำหรับจับคู่ "EMPLOYEE:100" ตามด้วย Non-digit หรือ End-of-string

ใช้ REGEXP พร้อม Pattern "EMPLOYEE:100([^0-9]|$)" เพื่อจับคู่ข้อความที่ขึ้นต้นด้วย EMPLOYEE:100 และตามด้วย **ไม่ใช่ตัวเลข** หรือ **จบสตริง**

Pattern Breakdown

  • EMPLOYEE:100 - Literal String
  • ([^0-9]|$) - กลุ่ม Capture: [^0-9] (ไม่ใช่ตัวเลข) **OR** $ (End of String)
  • หมายความว่า: ตรง "EMPLOYEE:100" แล้วจบ หรือ ตรง "EMPLOYEE:100 " (Space) หรือ "EMPLOYEE:100X" (Non-digit)
  • ไม่ตรง: "EMPLOYEE:10023432..." (ตามด้วยตัวเลข)

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูล:

mysql> CREATE TABLE DemoTable (EmployeeCode VARCHAR(100));
Query OK, 0 rows affected (0.56 sec)

mysql> INSERT INTO DemoTable VALUES 
    ('EMPLOYEE:100 John Smith'),
    ('EMPLOYEE:16537 Chris Brown'),
    ('EMPLOYEE:100 David Miller'),
    ('EMPLOYEE:100 23432 David Miller');
Query OK, 4 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable;
+---------------------------------+
| EmployeeCode                    |
+---------------------------------+
| EMPLOYEE:100 John Smith         |
| EMPLOYEE:16537 Chris Brown      |
| EMPLOYEE:100 David Miller       |
| EMPLOYEE:100 23432 David Miller |
+---------------------------------+
4 rows in set (0.00 sec)

ค้นหา Pattern EMPLOYEE:100 ตามด้วย Non-digit หรือ End:

mysql> SELECT * FROM DemoTable 
WHERE EmployeeCode REGEXP "EMPLOYEE:100([^0-9]|$)";
+---------------------------------+
| EmployeeCode                    |
+---------------------------------+
| EMPLOYEE:100 John Smith         |
| EMPLOYEE:100 David Miller       |
| EMPLOYEE:100 23432 David Miller |
+---------------------------------+
3 rows in set (0.00 sec)

อธิบายผลลัพธ์:

  • EMPLOYEE:100 John Smith - ตรง (ตามด้วย Space = Non-digit) ✓
  • EMPLOYEE:16537 Chris Brown - **ไม่ตรง** (เป็น 16537 ไม่ใช่ 100) ✗
  • EMPLOYEE:100 David Miller - ตรง (ตามด้วย Space) ✓
  • EMPLOYEE:100 23432 David Miller - **ตรง!** (ตามด้วย Space ก่อน 23432) ✓

Pattern แบบ Strict: ต้องจบทันทีหรือ Space แล้วจบ (ไม่มีตัวเลขต่อ)

-- จบทันที หรือ Space แล้วจบ หรือ Space แล้ว Non-digit
WHERE EmployeeCode REGEXP '^EMPLOYEE:100( |$| [^0-9])'

Regex Meta-characters ใน MySQL (POSIX)

Patternความหมาย
^เริ่มสตริง
$จบสตริง
.ตัวอักษรใดๆ (ยกเว้น Newline)
[abc]ตัวอักษรใดตัวหนึ่งในชุด
[^abc]ตัวอักษรที่ **ไม่ใช่** ในชุด
*0 หรือมากกว่า
+1 หรือมากกว่า
?0 หรือ 1
{n}พอดี n ครั้ง
{n,}n ครั้งขึ้นไป
{n,m}n ถึง m ครั้ง