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.