W MariaDB, LOCATE()
jest wbudowaną funkcją ciągu, która zwraca pozycję pierwszego wystąpienia podciągu w innym ciągu.
LOCATE()
jest podobny do INSTR()
funkcja, z wyjątkiem tego, że LOCATE()
udostępnia opcję określenia pozycji początkowej wyszukiwania. Również kolejność argumentów jest odwrócona między tymi dwiema funkcjami.
Składnia
LOCATE()
funkcja obsługuje składnię dwuargumentową i składnię trzyargumentową.
Składnia dwuargumentowa:
LOCATE(substr,str)
Składnia trzech argumentów:
LOCATE(substr,str,pos)
Gdzie str
jest ciągiem, substr
jest podciągiem do znalezienia, a pos
to pozycja do rozpoczęcia wyszukiwania.
Przykład
Oto podstawowy przykład:
SELECT LOCATE('hot', 'The hot sun');
Wynik:
+------------------------------+ | LOCATE('hot', 'The hot sun') | +------------------------------+ | 5 | +------------------------------+
Pozycja wyjściowa
Oto przykład podania pozycji początkowej wyszukiwania:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Wynik:
+------------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot', 8) | +------------------------------------------------+ | 23 | +------------------------------------------------+
Wrażliwość na wielkość liter
LOCATE()
wykonuje wyszukiwanie bez uwzględniania wielkości liter:
SELECT LOCATE('HOT', 'The hot sun');
Wynik:
+------------------------------+ | LOCATE('HOT', 'The hot sun') | +------------------------------+ | 5 | +------------------------------+
Wiele wystąpień
Jeśli podciąg występuje więcej niż raz, zwracana jest tylko pozycja pierwszego (od pozycji początkowej):
SELECT LOCATE('hot', 'The hot sun is really hot');
Wynik:
+--------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot') | +--------------------------------------------+ | 5 | +--------------------------------------------+
Oto pozycja wyjściowa:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Wynik:
+------------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot', 20) | +------------------------------------------------+ | 23 | +------------------------------------------------+
Dopasowanie częściowe
Jeśli podciąg jest częścią większego słowa, nadal jest zgodny:
SELECT LOCATE('hot', 'The hottest sun');
Wynik:
+----------------------------------+ | LOCATE('hot', 'The hottest sun') | +----------------------------------+ | 5 | +----------------------------------+
Ale jeśli ciąg jest tylko częścią podciągu, nie jest to dopasowanie:
SELECT LOCATE('hottest', 'The hot sun');
Wynik:
+----------------------------------+ | LOCATE('hottest', 'The hot sun') | +----------------------------------+ | 0 | +----------------------------------+
Przestrzenie
Znak spacji nadal jest ciągiem, więc możemy w podłańcuch umieszczać spacje, nawet jeśli jest to jedyny znak:
SELECT LOCATE(' ', 'The hot sun');
Wynik:
+----------------------------+ | LOCATE(' ', 'The hot sun') | +----------------------------+ | 4 | +----------------------------+
Pusty ciąg
Oto, co się dzieje, gdy podciąg jest pustym ciągiem:
SELECT LOCATE('', 'The hot sun');
Wynik:
+---------------------------+ | LOCATE('', 'The hot sun') | +---------------------------+ | 1 | +---------------------------+
Brak dopasowania
Jeśli podciąg nie zostanie znaleziony w ciągu, LOCATE()
zwraca 0
:
SELECT LOCATE('cold', 'The hot sun');
Wynik:
+-------------------------------+ | LOCATE('cold', 'The hot sun') | +-------------------------------+ | 0 | +-------------------------------+
Argumenty zerowe
Podanie null
dla dowolnego z argumentów daje wynik null
:
SELECT
LOCATE(null, 'The hot sun'),
LOCATE('hot', null);
Wynik:
+-----------------------------+---------------------+ | LOCATE(null, 'The hot sun') | LOCATE('hot', null) | +-----------------------------+---------------------+ | NULL | NULL | +-----------------------------+---------------------+
Podanie niewłaściwej liczby argumentów
Wywołanie LOCATE()
z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:
SELECT LOCATE('hot');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOCATE'