Problem:
Chcesz podzielić ciąg w MySQL.
Przykład:
Nasza baza danych zawiera tabelę o nazwie Student
z danymi w kolumnach id
i name
.
id | imię |
---|---|
1 | Anna Smith |
2 | Mark Twain |
3 | Zielony Brad |
Pobierzmy dane z nazwy kolumny i podzielmy je na firstname
i lastname
.
Rozwiązanie:
Użyjemy SUBSTRING_INDEX()
funkcjonować. Oto zapytanie:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
Oto wynik zapytania:
imię | nazwisko |
---|---|
Anna | Kowalski |
Zaznacz | Twain |
Brad | Zielony |
Dyskusja:
Funkcja SUBSTRING_INDEX()
przyjmuje 3 argumenty:ciąg źródłowy, ogranicznik i liczba wystąpień ogranicznika.
ciąg źródłowy to ciąg, który chcielibyśmy podzielić.
ogranicznik to ciąg znaków, który SUBSTRING_INDEX()
funkcja szuka w ciągu źródłowym. Po znalezieniu wskazuje miejsce, w którym kończy się podciąg. Ogranicznikiem może być pojedynczy znak, taki jak spacja, ale może to być również wzorzec składający się z dwóch lub więcej znaków. W tym wzorze rozróżniana jest wielkość liter; oznacza to, że ma znaczenie, czy podane znaki są dużymi czy małymi literami. Pamiętaj, że ogranicznik jest ciągiem, więc musi być napisany w cudzysłowie („”).
Ostatni argument to liczba wystąpień . Wskazuje, ile razy należy dopasować wzorzec ogranicznika. Pamiętaj, że liczba wystąpień może być wartością ujemną. Gdy jest ujemny, liczymy wystąpienia ogranicznika z prawej strony. Gdy liczba jest liczbą dodatnią, liczymy od lewej.
Funkcja wypisuje każdy znak łańcucha źródłowego, dopóki ogranicznik nie zostanie dopasowany określoną liczbę wystąpień.
Jeśli uruchomimy następujące zapytanie:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
wynik będzie następujący:
Ann
Jak widać, funkcja zwróciła wszystkie znaki, aż do znalezienia pierwszej spacji od lewej.
W naszym przykładzie jako imię ucznia pobieramy wszystkie znaki do pierwszej spacji od lewej, a jako nazwisko ucznia wszystkie znaki do pierwszej spacji od prawej.