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 | +--------+