В MySQL, LOCATE()
функцията връща позицията на подниз в низ. По-конкретно, той връща позицията на първото появяване в низа или първото появяване след дадена начална точка.
Синтаксис
Може да се използва по един от следните начини:
LOCATE(substr,str)LOCATE(substr,str,pos)
Където substr
е поднизът за намиране и str
е низът за търсене.
Когато използвате втория синтаксис, pos
е позицията за започване на търсене.
Пример 1 – Първи синтаксис
Ето пример за използване на първия синтаксис:
SELECT LOCATE('cat', 'Една котка прескочи другата котка') КАТО Резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 5 |+-------+Пример 2 – Втори синтаксис
Ето пример, в който посочваме начална позиция, за да започнем търсенето:
SELECT LOCATE('cat', 'Една котка скочи над другата котка', 6) КАТО Резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 31 |+--------+
В този случай, първото появяване на cat
започва от позиция 5, но посочих търсенето да започне от позиция 6. Следователно позицията на следващото появяване на този низ беше тази, която беше върната.
Имайте предвид, че въпреки че търсенето е започнало на позиция 6, функцията все още връща позицията на подниза в низа – не от началната позиция.
Ето още един пример, който да ви помогне да направите това по-ясно.
ИЗБЕРЕТЕ LOCATE('c', 'a b c', 1) КАТО 'Резултат 1', LOCATE('c', 'a b c', 2) КАТО 'Резултат 2', LOCATE('c', 'a b в“, 4) AS „Резултат 3“;
Резултат:
+----------+-----------+---------+| Резултат 1 | Резултат 2 | Резултат 3 |+----------+----------+----------+| 5 | 5 | 5 |+---------+----------+---------+
Резултатът е един и същ, независимо къде започнем да търсим.
Пример 3 – Намиране на част от дума
Поднизът може да бъде част от по-дълга дума:
SELECT LOCATE('sing', 'Inceasingly') КАТО резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 7 |+-------+Всъщност няма изискване дори да е дума (в края на краищата ние просто търсим низ):
ИЗБЕРЕТЕ LOCATE('z23!#', 'u_4, z23!#') КАТО 'Резултат 1', LOCATE(' ', 'a b c') КАТО 'Резултат 2', LOCATE(',', 'cat , куче, птица") КАТО "Резултат 3";
Резултат:
+----------+-----------+---------+| Резултат 1 | Резултат 2 | Резултат 3 |+----------+----------+----------+| 6 | 2 | 4 |+---------+-----------+---------+
Пример 4 – Няма съвпадения
Ако поднизът не е намерен, 0 се връща:
ИЗБЕРЕТЕ LOCATE('Bat', 'Inceasingly') КАТО резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 0 |+-------+Пример 5 – Чувствителност на малки и малки букви
Тази функция е многобайтова безопасна и е чувствителна към малките букви само ако поне един аргумент е двоичен низ.
Следователно следното работи с недвоични низове, въпреки че случаят не съвпада:
ИЗБЕРЕТЕ LOCATE('Sing', 'Inceasingly') КАТО резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 7 |+-------+Но ако използваме двоичен низ, това се случва:
SET @str =BINARY 'Все повече'; SELECT LOCATE('Sing', @str) КАТО резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 0 |+-------+Но разбира се, ако го променим така, че случайът да съвпада, получаваме съвпадение:
SET @str =BINARY 'Все повече'; SELECT LOCATE('sing', @str) КАТО резултат;
Резултат:
<пред>+--------+| Резултат |+--------+| 7 |+-------+Пример 6 – NULL аргументи
Ако някой от аргументите е NULL
,
NULL
се връща:
SELECT LOCATE(NULL, 'Increasingly') a, LOCATE('Bat', NULL) b, LOCATE('Bat', 'Increasingly', NULL) c;
Резултат:
+------+------+------+| а | б | c |+------+------+------+| NULL | NULL | NULL |+------+------+------+