MySQL - REGEXP_SUBSTR() Function

Xin chào các bạn, những phù thủy cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình đầy thú vị vào thế giới của hàm REGEXP_SUBSTR() trong MySQL. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Hãy lấy một tách cà phê, và cùng nhau bắt đầu nhé!

MySQL - regexp_substr() Function

What is REGEXP_SUBSTR()?

Trước khi chúng ta bắt đầu viết mã, hãy hiểu rõ REGEXP_SUBSTR() là gì. Hãy tưởng tượng bạn là một thám tử đang cố gắng tìm kiếm các mẫu cụ thể trong một chuỗi văn bản dài. Đó chính xác là điều mà REGEXP_SUBSTR() làm - nó giống như một kính lúp siêu thông minh cho cơ sở dữ liệu của bạn!

REGEXP_SUBSTR() là một hàm trong MySQL sử dụng biểu thức chính quy để tìm kiếm và trích xuất các mẫu cụ thể từ một chuỗi. Nó giống như một cây kéo đa năng cho việc xử lý văn bản trong công cụ cơ sở dữ liệu của bạn.

Cú pháp

Dưới đây là cách hàm REGEXP_SUBSTR() trông như thế nào:

REGEXP_SUBSTR(subject, pattern[, position[, occurrence[, match_type]]])

Đừng để điều này làm bạn hoảng hốt! Chúng ta sẽ phân tích nó từng phần:

  • subject: Chuỗi mà chúng ta muốn tìm kiếm (nguồn của chúng ta)
  • pattern: Biểu thức chính quy mà chúng ta đang tìm kiếm (kim của chúng ta)
  • position: Điểm bắt đầu tìm kiếm (tùy chọn, mặc định là 1)
  • occurrence: Lần khớp nào để trả về nếu có nhiều lần (tùy chọn, mặc định là 1)
  • match_type: Các tùy chọn matching bổ sung (tùy chọn)

Cách sử dụng cơ bản

Hãy bắt đầu với một ví dụ đơn giản để làm quen:

SELECT REGEXP_SUBSTR('Hello, World!', 'World') AS result;

Nếu bạn chạy truy vấn này, bạn sẽ nhận được:

result
World

Điều gì đã xảy ra ở đây? Chúng ta đã yêu cầu MySQL tìm từ 'World' trong chuỗi 'Hello, World!', và nó đã làm đúng như vậy!

Đ变得 sáng tạo hơn

Bây giờ, hãy thử một điều gì đó khó khăn hơn. Giả sử chúng ta có một danh sách các địa chỉ email, và chúng ta muốn trích xuất chỉ các tên miền:

SELECT REGEXP_SUBSTR('[email protected]', '@(.+)$') AS domain;

Kết quả:

domain
@example.com

Oops! Chúng ta đã có dấu '@' rồi. Hãy tinh chỉnh mẫu của chúng ta:

SELECT REGEXP_SUBSTR('[email protected]', '@(.+)$', 1, 1, 'c') AS domain;

Kết quả:

domain
example.com

Tuyệt vời hơn! Ký tự 'c' trong tham số match_type cho MySQL biết trả về nhóm đã bắt được (phần trong dấu ngoặc) thay vì toàn bộ khớp.

Làm việc với dữ liệu thực tế

Hãy tạo một bảng nhỏ để thực hành:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100)
);

INSERT INTO users (email) VALUES
('[email protected]'),
('[email protected]'),
('[email protected]');

Bây giờ, hãy trích xuất tất cả các tên miền:

SELECT email, REGEXP_SUBSTR(email, '@(.+)$', 1, 1, 'c') AS domain
FROM users;

Kết quả:

email domain
[email protected] gmail.com
[email protected] yahoo.com
[email protected] hotmail.com

Có phải đó là điều tuyệt vời không? Chỉ với một truy vấn, chúng ta đã trích xuất tất cả các tên miền!

Kỹ thuật nâng cao

Nhiều lần xuất hiện

Đôi khi, bạn có thể muốn tìm kiếm nhiều lần xuất hiện của một mẫu. Hãy xem cách làm:

SELECT REGEXP_SUBSTR('apple,banana,cherry,date', '[^,]+', 1, 1) AS first_fruit,
       REGEXP_SUBSTR('apple,banana,cherry,date', '[^,]+', 1, 2) AS second_fruit,
       REGEXP_SUBSTR('apple,banana,cherry,date', '[^,]+', 1, 3) AS third_fruit;

Kết quả:

first_fruit second_fruit third_fruit
apple banana cherry

Tại đây, chúng ta sử dụng [^,]+ để khớp bất kỳ ký tự nào không phải là dấu phẩy. Các số ở cuối (1, 2, 3) cho MySQL biết lần xuất hiện nào để trả về.

Khớp không phân biệt chữ hoa/chữ thường

Nếu bạn muốn khớp các mẫu không phân biệt chữ hoa/chữ thường, bạn có thể sử dụng tùy chọn 'i':

SELECT REGEXP_SUBSTR('The Quick Brown Fox', 'quick', 1, 1, 'i') AS result;

Kết quả:

result
Quick

Dù chúng ta tìm kiếm 'quick' in chữ thường,但我们还是找到了字符串中的 'Quick'!

Hàm REGEXP_SUBSTR() Sử dụng một chương trình khách

Trong khi MySQL Workbench rất tuyệt cho việc chạy truy vấn, bạn cũng có thể sử dụng REGEXP_SUBSTR() trong các ngôn ngữ lập trình khác. Dưới đây là một ví dụ nhanh trong Python:

import mysql.connector

# Kết nối đến cơ sở dữ liệu MySQL của bạn
cnx = mysql.connector.connect(user='your_username', password='your_password',
                              host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Thực hiện một truy vấn sử dụng REGEXP_SUBSTR()
query = "SELECT REGEXP_SUBSTR('Hello, World!', 'World') AS result"
cursor.execute(query)

# Lấy và in kết quả
result = cursor.fetchone()
print(f"Kết quả là: {result[0]}")

# Đừng quên đóng kết nối
cnx.close()

Sketch này kết nối đến cơ sở dữ liệu MySQL của bạn, chạy một truy vấn REGEXP_SUBSTR() đơn giản và in kết quả.

Kết luận

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 REGEXP_SUBSTR(). Nhớ rằng, như bất kỳ công cụ thám tử nào, nó cần thời gian để thành thạo. Đừng ngại thử nghiệm với các mẫu và tùy chọn khác nhau.

Dưới đây là bảng tóm tắt các tham số của REGEXP_SUBSTR():

Tham số Mô tả Tùy chọn?
subject Chuỗi cần tìm kiếm Không
pattern Biểu thức chính quy cần tìm kiếm Không
position Điểm bắt đầu tìm kiếm
occurrence Lần khớp nào để trả về
match_type Các tùy chọn matching bổ sung

Tiếp tục thực hành, và sớm bạn sẽ trích xuất dữ liệu từ các chuỗi như một chuyên gia! Nhớ rằng, trong thế giới cơ sở dữ liệu, khả năng manipulates và trích xuất dữ liệu cụ thể là một siêu năng lực. Và bây giờ, bạn đang trên đường trở thành một siêu anh hùng!

Credits: Image by storyset