W MySQL funkcja LOCATE()
funkcja zwraca pozycję podciągu w ciągu. Dokładniej, zwraca pozycję pierwszego wystąpienia w ciągu lub pierwszego wystąpienia po danym punkcie początkowym.
Składnia
Można go używać na jeden z następujących sposobów:
LOCATE(substr,str) LOCATE(substr,str,pos)
Gdzie substr
jest podciągiem do zlokalizowania, a str
to ciąg do przeszukania.
Używając drugiej składni, pos
to pozycja do rozpoczęcia wyszukiwania.
Przykład 1 – Pierwsza składnia
Oto przykład z użyciem pierwszej składni:
SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;
Wynik:
+--------+ | Result | +--------+ | 5 | +--------+
Przykład 2 – Druga składnia
Oto przykład, w którym określamy pozycję początkową, aby rozpocząć wyszukiwanie:
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;
Wynik:
+--------+ | Result | +--------+ | 31 | +--------+
W tym przypadku pierwsze wystąpienie cat
zaczyna się od pozycji 5, ale określiłem, że wyszukiwanie zaczyna się od pozycji 6. Dlatego pozycja następnego wystąpienia tego ciągu była tą, która została zwrócona.
Zauważ, że chociaż wyszukiwanie rozpoczęło się na pozycji 6, funkcja nadal zwraca pozycję podciągu w ciągu – nie od pozycji początkowej.
Oto kolejny przykład, który pomoże to wyjaśnić.
SELECT LOCATE('c', 'a b c', 1) AS 'Result 1', LOCATE('c', 'a b c', 2) AS 'Result 2', LOCATE('c', 'a b c', 4) AS 'Result 3';
Wynik:
+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | +----------+----------+----------+ | 5 | 5 | 5 | +----------+----------+----------+
Rezultat jest taki sam bez względu na to, gdzie zaczniemy szukać.
Przykład 3 – Lokalizowanie części słowa
Podciąg może być częścią dłuższego słowa:
SELECT LOCATE('sing', 'Increasingly') AS Result;
Wynik:
+--------+ | Result | +--------+ | 7 | +--------+
W rzeczywistości nie ma wymogu, aby było to nawet słowo (w końcu po prostu szukamy ciągu):
SELECT LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1', LOCATE(' ', 'a b c') AS 'Result 2', LOCATE(',', 'cat, dog, bird') AS 'Result 3';
Wynik:
+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | +----------+----------+----------+ | 6 | 2 | 4 | +----------+----------+----------+
Przykład 4 – Brak meczów
Jeśli podciąg nie zostanie znaleziony, 0 jest zwracany:
SELECT LOCATE('Bat', 'Increasingly') AS Result;
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Przykład 5 – Rozróżnianie wielkości liter
Ta funkcja jest bezpieczna dla wielu bajtów i rozróżnia wielkość liter tylko wtedy, gdy przynajmniej jeden argument jest ciągiem binarnym.
Dlatego poniższe działa na niebinarnych ciągach, nawet jeśli wielkość liter nie pasuje:
SELECT LOCATE('Sing', 'Increasingly') AS Result;
Wynik:
+--------+ | Result | +--------+ | 7 | +--------+
Ale jeśli użyjemy ciągu binarnego, dzieje się tak:
SET @str = BINARY 'Increasingly'; SELECT LOCATE('Sing', @str) AS Result;
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Ale oczywiście, jeśli zmienimy to tak, aby przypadek się zgadzał, otrzymamy dopasowanie:
SET @str = BINARY 'Increasingly'; SELECT LOCATE('sing', @str) AS Result;
Wynik:
+--------+ | Result | +--------+ | 7 | +--------+
Przykład 6 – Argumenty NULL
Jeśli którykolwiek z argumentów jest NULL
,
NULL
jest zwracany:
SELECT LOCATE(NULL, 'Increasingly') a, LOCATE('Bat', NULL) b, LOCATE('Bat', 'Increasingly', NULL) c;
Wynik:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+