Vấn đề:
Bạn muốn tách một chuỗi trong MySQL.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng có tên là Student
với dữ liệu trong các cột id
và name
.
id | tên |
---|---|
1 | Ann Smith |
2 | Mark Twain |
3 | Brad Green |
Hãy tìm nạp dữ liệu từ tên cột và chia nó thành firstname
và lastname
.
Giải pháp:
Chúng tôi sẽ sử dụng SUBSTRING_INDEX()
hàm số. Đây là truy vấn:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
Đây là kết quả của truy vấn:
tên đầu tiên | họ |
---|---|
Ann | Smith |
Đánh dấu | Twain |
Brad | Màu xanh lá cây |
Thảo luận:
Hàm SUBSTRING_INDEX()
nhận 3 đối số:chuỗi nguồn, dấu phân cách và số lần xuất hiện của dấu phân cách.
Chuỗi nguồn là chuỗi mà chúng tôi muốn tách.
Dấu phân cách là một chuỗi ký tự SUBSTRING_INDEX()
hàm tìm kiếm trong chuỗi nguồn. Khi được tìm thấy, nó chỉ ra nơi kết thúc chuỗi con. Dấu phân cách có thể là một ký tự đơn lẻ chẳng hạn như khoảng trắng, nhưng nó cũng có thể là một mẫu bao gồm hai hoặc nhiều ký tự. Mẫu này phân biệt chữ hoa chữ thường; nghĩa là, vấn đề quan trọng là các ký tự đã cho là chữ hoa hay chữ thường. Hãy nhớ rằng dấu phân tách là một chuỗi, vì vậy nó phải được viết trong dấu ngoặc kép (‘’).
Đối số cuối cùng là số lần xuất hiện . Nó cho biết số lần mẫu dấu phân cách cần được khớp. Lưu ý rằng số lần xuất hiện có thể là một giá trị âm. Khi nó âm, chúng tôi đếm số lần xuất hiện của dấu phân cách từ bên phải. Khi số đếm là một số dương, chúng tôi đếm từ bên trái.
Hàm xuất ra mọi ký tự của chuỗi nguồn cho đến khi dấu phân cách được khớp với số lần được cho bởi số lần xuất hiện.
Nếu chúng tôi chạy truy vấn sau:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
đầu ra sẽ là:
Ann
Như bạn có thể thấy, hàm trả về tất cả các ký tự cho đến khi tìm thấy khoảng trống đầu tiên từ bên trái.
Trong ví dụ của chúng tôi, chúng tôi truy xuất dưới dạng tên của học sinh tất cả các ký tự có khoảng cách đầu tiên từ bên trái và dưới dạng họ của học sinh tất cả các ký tự tính đến khoảng trắng đầu tiên từ bên phải.