MySQL ma wiele funkcji łańcuchowych, które zwracają pozycję podciągu w łańcuchu. Dokładniej, zwracają pozycję pierwszego wystąpienia w ciągu (lub pierwszego wystąpienia po danym punkcie początkowym).
Funkcje, o których mówię, są następujące:
INSTR()LOCATE()POSITION()
Poniżej znajduje się przegląd każdego z nich.
INSTR()
INSTR() funkcja zwraca pierwsze wystąpienie podciągu w ciągu.
Oto składnia:
INSTR(str,substr)
Gdzie str to ciąg, który chcesz przeszukać, a substr to podciąg, którego szukasz.
Przykład
SELECT INSTR('Cats and dogs like to run', 'dogs') AS Result; Wynik:
+--------+ | Result | +--------+ | 10 | +--------+
W tym przypadku ciąg dogs zaczyna się od pozycji 10.
Jeśli podciąg nie zostanie znaleziony, wynik 0 jest zwracany:
SELECT INSTR('Cats and dogs like to run', 'rabbit') AS Result; Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
LOKALIZUJ()
LOCATE() funkcja działa w podobny sposób, z wyjątkiem kilku różnic; argumenty są w innej kolejności i możesz podać opcjonalny trzeci parametr, aby wskazać, gdzie rozpocząć wyszukiwanie.
Dlatego możesz go używać na jeden z następujących sposobów:
LOCATE(substr,str) LOCATE(substr,str,pos)
Pierwsza składnia jest podobna do INTSR() składnia, z wyjątkiem tego, że str i substr są zamieniane.
Druga składnia dodaje opcjonalny pos argument, który pozwala określić pozycję do rozpoczęcia wyszukiwania.
Przykład pierwszej składni
Oto przykład z użyciem pierwszej składni:
SELECT LOCATE('dogs', 'Cats and dogs like to run') AS Result; Wynik:
+--------+ | Result | +--------+ | 10 | +--------+
Przykład drugiej składni
Oto przykład, w którym określamy pozycję początkową, aby rozpocząć wyszukiwanie:
SELECT LOCATE('cat', 'Cats, cats, and more cats!', 6) AS Result; Wynik:
+--------+ | Result | +--------+ | 7 | +--------+
Widzimy, że ciąg cat można znaleźć na pozycji 1, ale określiliśmy 6 jako pozycja wyjściowa. Dlatego pozycja następnego wystąpienia tego ciągu była tą, która została zwrócona.
Podobnie jak w przypadku INSTR() funkcja, jeśli podciąg nie zostanie znaleziony, 0 jest zwracany.
POZYCJA()
POSITION() funkcja jest synonimem LOCATE() , ale z nieco inną składnią.
Oto składnia:
POSITION(substr IN str)
To jest synonim:
LOCATE(substr,str)
Możemy więc przepisać jeden z poprzednich przykładów w następujący sposób:
SELECT POSITION('dogs' IN 'Cats and dogs like to run') AS Result; Wynik:
+--------+ | Result | +--------+ | 10 | +--------+