Để trích xuất văn bản giữa các dấu phân cách, bạn cần kết hợp hàm LOCATE() và SUBSTR() (hoặc SUBSTRING()).
Cú pháp chung
SELECT SUBSTR(cot_cua_ban, LOCATE(':', cot_cua_ban) + 1,
(CHAR_LENGTH(cot_cua_ban) - LOCATE(':', REVERSE(cot_cua_ban)) - LOCATE(':', cot_cua_ban))) AS ten_biet_danh
FROM ten_bang_cua_ban;
Trong ví dụ này, dấu phân cách là hai chấm (:), bạn có thể thay bằng ký tự khác.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE TimKiemGiuaDauPhanCach (
-> Id INT NOT NULL AUTO_INCREMENT,
-> TuKhoa LONGTEXT,
-> PRIMARY KEY(Id)
-> );
Chèn dữ liệu:
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('Object:Oriented:Programming');
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('C++:Java:C#');
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('SQLServer:MySQL:Oracle');
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('SQL SQLServer:MySQL:Oracle');
Hiển thị dữ liệu gốc:
+----+-----------------------------+ | Id | TuKhoa | +----+-----------------------------+ | 1 | Object:Oriented:Programming | | 2 | C++:Java:C# | | 3 | SQLServer:MySQL:Oracle | | 4 | SQL SQLServer:MySQL:Oracle | +----+-----------------------------+
Truy vấn trích xuất văn bản giữa các dấu phân cách
mysql> SELECT
-> SUBSTR(TuKhoa,
-> LOCATE(':', TuKhoa) + 1,
-> (CHAR_LENGTH(TuKhoa) - LOCATE(':', REVERSE(TuKhoa)) - LOCATE(':', TuKhoa))) AS VanBan
-> FROM TimKiemGiuaDauPhanCach;
Kết quả (lấy phần giữa dấu hai chấm đầu tiên và cuối cùng):
+----------+ | VanBan | +----------+ | Oriented | | Java | | MySQL | | MySQL | +----------+
Giải thích: Công thức tính độ dài chuỗi con: độ dài toàn bộ chuỗi trừ vị trí dấu phân cách cuối cùng (được tìm bằng REVERSE) trừ vị trí dấu phân cách đầu tiên.