MySQL REGEXP_LIKE() Function: A Beginner's Guide

Xin chào các nhà法师 cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới MySQL và khám phá một hàm mạnh mẽ叫做 REGEXP_LIKE(). Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ cùng nhau từng bước. Cuối cùng của hướng dẫn này, bạn sẽ sử dụng các biểu thức chính quy như một chuyên gia!

MySQL - regexp_like() Function

What is REGEXP_LIKE()?

Trước khi chúng ta đi sâu vào chi tiết, hãy hiểu REGEXP_LIKE() là gì. Hãy tưởng tượng bạn là một thám tử cố gắng tìm kiếm một mẫu cụ thể trong biển văn bản. Đó chính xác là điều mà REGEXP_LIKE() làm - nó tìm kiếm các mẫu trong dữ liệu của bạn bằng cách sử dụng thứ gọi là biểu thức chính quy (regex cho ngắn).

The Basics

REGEXP_LIKE() là một hàm trong MySQL trả về 1 (đúng) nếu một chuỗi khớp với mẫu biểu thức chính quy, và 0 (sai) nếu không khớp. Nó giống như hỏi, "Này MySQL, đoạn văn này có trông giống như điều tôi đang tìm kiếm không?"

Hãy phân tích cú pháp:

REGEXP_LIKE(expr, pattern[, match_type])
  • expr: Đây là văn bản bạn muốn tìm kiếm.
  • pattern: Đây là mẫu biểu thức chính quy bạn đang tìm kiếm.
  • match_type: Đây là tùy chọn và cho phép bạn chỉ định cách bạn muốn khớp (phân biệt chữ hoa chữ thường, đa dòng, v.v.).

Getting Started with REGEXP_LIKE()

Your First REGEXP_LIKE() Query

Hãy bắt đầu với một ví dụ đơn giản. Giả sử chúng ta có một bảng叫做 books với một cột title. Chúng ta muốn tìm tất cả các sách có từ "SQL" trong tiêu đề.

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'SQL');

Truy vấn này sẽ trả về tất cả các tiêu đề sách chứa "SQL", không phân biệt chữ hoa chữ thường (SQL, sql, SqL, v.v.).

Case Sensitivity

Nếu chúng ta muốn cụ thể hơn và chỉ khớp "SQL" in chữ hoa, chúng ta có thể sử dụng tham số match_type:

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'SQL', 'c');

Ký tự 'c' cho MySQL biết thực hiện khớp phân biệt chữ hoa chữ thường.

Advanced Pattern Matching

Bây giờ chúng ta đã có nền tảng, hãy cùng xem xét một số mẫu phức tạp hơn!

Matching at the Beginning or End

Để khớp mẫu ở đầu chuỗi, sử dụng '^':

SELECT title
FROM books
WHERE REGEXP_LIKE(title, '^The');

Điều này sẽ tìm tất cả các sách bắt đầu bằng "The".

Để khớp ở cuối, sử dụng '$':

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'Edition$');

Điều này tìm các sách kết thúc bằng "Edition".

Matching Multiple Patterns

Muốn tìm sách về cả SQL và Python? Không có vấn đề gì!

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'SQL|Python');

Ký tự '|' hoạt động như một toán tử "HOẶC" trong regex.

Matching Characters in a Range

Giả sử chúng ta muốn tìm sách có số trong tiêu đề:

SELECT title
FROM books
WHERE REGEXP_LIKE(title, '[0-9]');

Điều này sẽ khớp bất kỳ tiêu đề nào chứa một chữ số từ 0 đến 9.

Real-World Examples

Example 1: Finding Email Addresses

Hãy tưởng tượng bạn có một bảng叫做 customers và muốn xác thực địa chỉ email:

SELECT email
FROM customers
WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$');

Mẫu phức tạp này kiểm tra định dạng email hợp lệ. Hãy phân tích nó:

  • ^[A-Za-z0-9._%+-]+: Bắt đầu với một hoặc nhiều chữ cái, số hoặc các ký tự nhất định
  • @: Theo sau bởi một ký tự '@'
  • [A-Za-z0-9.-]+: Sau đó là một hoặc nhiều chữ cái, số, dấu chấm hoặc gạch ngang
  • \\.[A-Za-z]{2,}$: Kết thúc bằng một dấu chấm và ít nhất hai chữ cái

Example 2: Searching for Phone Numbers

Hãy tìm số điện thoại theo định dạng cụ thể:

SELECT phone
FROM contacts
WHERE REGEXP_LIKE(phone, '^\\+1-[0-9]{3}-[0-9]{3}-[0-9]{4}$');

Mẫu này khớp với số điện thoại như +1-123-456-7890.

REGEXP_LIKE() Function Using a Client Program

Khi bạn làm việc với một chương trình khách MySQL như MySQL command-line client, bạn có thể sử dụng REGEXP_LIKE() trong các truy vấn của mình như chúng ta đã làm trong các ví dụ. Dưới đây là cách bạn có thể sử dụng nó trong một chương trình khách:

  1. Kết nối với cơ sở dữ liệu MySQL của bạn:

    mysql -u your_username -p your_database_name
  2. Sau khi kết nối, bạn có thể chạy các truy vấn sử dụng REGEXP_LIKE():

    SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, 'your_pattern');

Nhớ rằng, sức mạnh của REGEXP_LIKE() là nó hoạt động mượt mà cho dù bạn đang sử dụng một công cụ GUI, một client dòng lệnh hoặc nhúng SQL trong mã ứng dụng của bạn!

Conclusion

Chúc mừng! Bạn vừa bước những bước đầu tiên vào thế giới mạnh mẽ của các biểu thức chính quy trong MySQL. REGEXP_LIKE() là một hàm linh hoạt có thể giúp bạn tìm kiếm các mẫu trong dữ liệu của bạn mà sẽ rất khó hoặc không thể với các so sánh LIKE đơn giản.

Nhớ rằng, thực hành làm nên hoàn hảo. Thử tạo ra các mẫu của riêng bạn và kiểm tra chúng trên dữ liệu mẫu. Trước khi bạn biết điều đó, bạn sẽ sử dụng REGEXP_LIKE() để khám phá ra những thông tin trong cơ sở dữ liệu của bạn như một thám tử thực thụ!

Chúc may mắn trong việc truy vấn, và mong rằng các biểu thức chính quy của bạn luôn tìm thấy khớp!

Credits: Image by storyset