W MariaDB możesz użyć SUBSTRING_INDEX()
funkcja zwracająca wszystko przed lub po określonym znaku (lub znakach) w ciągu.
Ta funkcja przyjmuje trzy argumenty; ciąg, ogranicznik i liczba wystąpień tego ogranicznika, który zostanie użyty do określenia podciągu do zwrócenia.
Przykłady
Możemy zobaczyć, jak ta funkcja działa na poniższych przykładach.
Zaznacz wszystko przed
Aby zaznaczyć wszystko przed określonym znakiem, ustaw trzeci argument jako wartość dodatnią:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 2);
Wynik:
Red,Green
W tym przykładzie zaznaczamy wszystko przed drugim przecinkiem. Odbywa się to za pomocą przecinka (,
) jako ogranicznik i 2
jako licznik.
W tym przykładzie użyłem przecinka, ale mógł to być dowolny znak lub ciąg:
SELECT SUBSTRING_INDEX('Red or Green or Blue', ' or ', 2);
Wynik:
Red or Green
Wybierz wszystko po
Użyj wartości ujemnej, aby zaznaczyć wszystko po określonym znaku:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', -2);
Wynik:
Green,Blue
Zauważ, że wartość ujemna oznacza, że będzie liczona od prawej, a następnie wybierz podciąg z prawej strony ogranicznika.
Gdy separator nie zostanie znaleziony
Jeśli ogranicznik nie zostanie znaleziony w ciągu, ciąg jest zwracany w całości.
Przykład:
SELECT SUBSTRING_INDEX('Red,Green,Blue', '-', 1);
Wynik:
Red,Green,Blue
W tym przypadku cały ciąg jest zwracany w całości, ponieważ użyliśmy łącznika (-
) jako ogranicznik, ale w ciągu nie ma łączników.
Otrzymalibyśmy ten sam wynik, jeśli ciąg tak zawierają ogranicznik, ale nasz count
przekracza liczbę ograniczników w ciągu.
Przykład:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 10);
Wynik:
Red,Green,Blue
Rozróżnianie wielkości liter
SUBSTRING_INDEX()
Funkcja wykonuje wyszukiwanie ogranicznika z uwzględnieniem wielkości liter. Oznacza to, że separator musi mieć odpowiednią wielkość liter, zanim będzie pasował.
Nieprawidłowy przypadek
Oto przykład, w którym sprawa nie pasuje:
SELECT SUBSTRING_INDEX('Red and green and blue', 'AND', 2);
Wynik:
Red and green and blue
Otrzymujemy cały ciąg.
Właściwy przypadek
Oto ten sam przykład, ale gdzie przypadek pasuje:
SELECT SUBSTRING_INDEX('Red and green and blue', 'and', 2);
Wynik:
Red and green