1. Hàm SUBSTRING là gì?
Hàm SUBSTRING là một hàm MySQL quan trọng được sử dụng để trích xuất một chuỗi con từ một chuỗi. Với hàm này, bạn có thể lấy ra chỉ phần cần thiết từ dữ liệu được lưu trữ trong cơ sở dữ liệu. Ví dụ, nó hữu ích khi bạn muốn trích xuất phần miền từ địa chỉ email của người dùng, hoặc lấy một phần cụ thể từ mã sản phẩm.
1.1 Cú pháp cơ bản
Cú pháp cơ bản của hàm SUBSTRING như sau:
SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
str: Chuỗi để trích xuất từ.pos: Vị trí bắt đầu (bắt đầu từ 1).len: Số ký tự để trích xuất (tùy chọn).
Nếu pos là giá trị dương, MySQL đếm tiến từ đầu chuỗi. Nếu âm, MySQL đếm lùi từ cuối chuỗi. Nếu bỏ qua len, MySQL trích xuất từ vị trí chỉ định đến cuối chuỗi.
1.2 Các trường hợp sử dụng hàm SUBSTRING
Hàm này được sử dụng để định dạng dữ liệu chuỗi và trích xuất các phần cụ thể, giúp dễ dàng tìm kiếm và xử lý thông tin hiệu quả trong cơ sở dữ liệu.
2. Sử dụng cơ bản của hàm SUBSTRING
Để hiểu cơ bản, hãy xem một số ví dụ đơn giản.
2.1 Trích xuất phần của một chuỗi
Truy vấn sau trích xuất 6 ký tự bắt đầu từ ký tự thứ 3 của chuỗi “Hello, World!”.
SELECT SUBSTRING('Hello, World!', 3, 6);
Kết quả là "llo, W". Vì pos là 3, việc trích xuất bắt đầu từ ký tự thứ 3, và vì len là 6, 6 ký tự được trích xuất.
2.2 Bỏ qua tham số độ dài
Nếu bạn bỏ qua len, MySQL trích xuất từ vị trí chỉ định đến cuối chuỗi.
SELECT SUBSTRING('Hello, World!', 8);
Kết quả là "World!", lấy mọi thứ từ ký tự thứ 8 đến cuối.
2.3 Sử dụng vị trí âm
Nếu bạn sử dụng giá trị âm, bạn có thể chỉ định vị trí từ cuối chuỗi.
SELECT SUBSTRING('Hello, World!', -5);
Truy vấn này trả về "orld!", trích xuất 5 ký tự cuối.
3. Ứng dụng thực tế của hàm SUBSTRING
Hàm SUBSTRING thường được sử dụng trong các hoạt động dữ liệu thực tế. Dưới đây là một số ví dụ thực tế.
3.1 Trích xuất miền từ địa chỉ email
Bằng cách kết hợp SUBSTRING với LOCATE, bạn có thể trích xuất phần miền từ địa chỉ email.
SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;
Truy vấn này trích xuất chuỗi sau “@” và chỉ trả về phần miền.
3.2 Trích xuất phần của mã sản phẩm
Ví dụ này trích xuất một phần cụ thể của mã sản phẩm.
SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;
Trong truy vấn này, 4 ký tự bắt đầu từ ký tự thứ 5 của mã sản phẩm được trích xuất và hiển thị dưới dạng cột mới có tên product_id.
3.3 Sử dụng trong truy vấn con
Bằng cách kết hợp với truy vấn con, bạn có thể trích xuất dữ liệu dưới các điều kiện phức tạp hơn.
SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;
Truy vấn này trích xuất 10 ký tự đầu của description từ các sản phẩm nơi category là ‘Electronics’.

4. So sánh với các hàm chuỗi khác
Các hàm khác có thể được sử dụng cho mục đích tương tự như SUBSTRING bao gồm LEFT, RIGHT, và SUBSTR.
4.1 Các hàm LEFT và RIGHT
LEFT(str, len): Lấy số ký tự chỉ định từ đầu chuỗi.RIGHT(str, len): Lấy số ký tự chỉ định từ cuối chuỗi.SELECT LEFT('Hello, World!', 5); -- "Hello" SELECT RIGHT('Hello, World!', 6); -- "World!"
Các hàm này tiện lợi khi bạn muốn trích xuất chuỗi con từ đầu hoặc cuối chuỗi.
4.2 Hàm SUBSTR
.
SUBSTR là một bí danh của SUBSTRING, vì vậy nó có thể được sử dụng theo cùng cách.
SELECT SUBSTR('Hello, World!', 8); -- "World!"
Truy vấn này trả về "World!", giống như SUBSTRING.
5. Sử Dụng Nâng Cao và Tối Ưu Hóa cho Hàm SUBSTRING
Phần này giải thích các kỹ thuật sử dụng nâng cao và tối ưu hoá.
5.1 Tối Ưu Hiệu Năng
Việc dùng SUBSTRING trên các bộ dữ liệu lớn có thể ảnh hưởng đến hiệu năng. Nếu cần, hãy tạo các chỉ mục và kiểm tra kế hoạch thực thi truy vấn. Ngoài ra, nếu bạn thường xuyên trích xuất cùng một chuỗi con, hãy cân nhắc lưu kết quả vào bộ nhớ đệm.
5.2 Sử Dụng Trong Mệnh Đề WHERE
Bạn có thể dùng SUBSTRING trong mệnh đề WHERE để lọc bản ghi dựa trên điều kiện chuỗi con.
SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';
Truy vấn này tìm các sản phẩm mà 3 ký tự đầu của product_code là ‘ABC’.
6. Ví Dụ và Thực Hành Tốt Nhất cho Hàm SUBSTRING
Dưới đây là các ví dụ thực tế về việc sử dụng SUBSTRING và các thực hành tốt nhất cho công việc thực tế.
6.1 Mã Mẫu
Mẫu sau chia tên đầy đủ của khách hàng thành họ và tên.
SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;
Trong truy vấn này, họ và tên được trích xuất từ một chuỗi đầy đủ được ngăn cách bằng dấu cách.
6.2 Thực Hành Tốt Nhất
- Chỉ trích xuất những gì bạn cần : Giữ độ dài chuỗi con càng ngắn càng tốt để giảm tác động đến hiệu năng.
- Chú ý tới kiểu dữ liệu : Nếu bạn áp dụng
SUBSTRINGlên dữ liệu số, có thể cần phải ép kiểu sang chuỗi một cách rõ ràng. - Xem xét việc sử dụng chỉ mục : Khi dùng
SUBSTRINGtrong mệnh đềWHERE, các chỉ mục có thể không được sử dụng hiệu quả, vì vậy hãy theo dõi kỹ hiệu năng truy vấn.
7. Xử Lý Lỗi và Khác Biệt Phiên Bản
Phần này đề cập đến việc xử lý lỗi khi dùng SUBSTRING và các khác biệt giữa các phiên bản MySQL.
7.1 Xử Lý Lỗi
Nếu vị trí được chỉ định nằm ngoài phạm vi của chuỗi, SUBSTRING sẽ trả về một chuỗi rỗng. Vì đây không phải là lỗi, nên nên thêm logic để kiểm tra kết quả trước khi sử dụng nếu cần.
7.2 Khác Biệt Phiên Bản
Tùy thuộc vào phiên bản MySQL, hành vi của hàm SUBSTRING có thể khác nhau. Ví dụ, một số phiên bản cũ hơn có thể xử lý ký tự đa byte khác nhau. Hãy kiểm tra tính tương thích giữa các phiên bản và áp dụng các biện pháp phù hợp khi cần.


