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é!
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ả:
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 | Có |
occurrence | Lần khớp nào để trả về | Có |
match_type | Các tùy chọn matching bổ sung | Có |
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