Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działa funkcja LOCATE() w MySQL

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niezdefiniowana funkcja mysql_connect()

  2. Jak najlepiej wykorzystać funkcję komentowania w MySQL?

  3. Jak przechowywać GUID w tabelach MySQL?

  4. Jak uciec przed słowami zastrzeżonymi używanymi jako nazwy kolumn? MySQL/Utwórz tabelę

  5. Błąd podczas wysyłania pakietu QUERY