MySQL има редица низови функции, които връщат позицията на подниз в низ. По-конкретно, те връщат позицията на първото появяване в низа (или първото появяване след дадена начална точка).
Функциите, които имам предвид, са следните:
INSTR()
LOCATE()
POSITION()
По-долу е даден преглед на всеки един от тях.
INSTR()
INSTR()
функцията връща първото появяване на подниз в низ.
Ето синтаксиса:
INSTR(str,substr)
Където str
е низът, който искате да търсите, и substr
е поднизът, който търсите.
Пример
SELECT INSTR('Cats and dogs like to run', 'dogs') AS Result;
Резултат:
+--------+ | Result | +--------+ | 10 | +--------+
В този случай низът dogs
започва от позиция 10.
Ако поднизът не е намерен, резултат от 0
се връща:
SELECT INSTR('Cats and dogs like to run', 'rabbit') AS Result;
Резултат:
+--------+ | Result | +--------+ | 0 | +--------+
LOCATE()
LOCATE()
функцията работи по подобен начин, с изключение на няколко разлики; аргументите са в различен ред и можете да предоставите незадължителен трети параметър, за да посочите откъде да започнете търсенето.
Следователно можете да го използвате по един от следните начини:
LOCATE(substr,str) LOCATE(substr,str,pos)
Първият синтаксис е точно като INTSR()
синтаксис, с изключение на str
и substr
се разменят.
Вторият синтаксис добавя незадължителния pos
аргумент, който ви позволява да посочите позиция, за да започнете търсенето.
Пример за първи синтаксис
Ето пример за използване на първия синтаксис:
SELECT LOCATE('dogs', 'Cats and dogs like to run') AS Result;
Резултат:
+--------+ | Result | +--------+ | 10 | +--------+
Пример за втори синтаксис
Ето пример, в който посочваме начална позиция, за да започнем търсенето:
SELECT LOCATE('cat', 'Cats, cats, and more cats!', 6) AS Result;
Резултат:
+--------+ | Result | +--------+ | 7 | +--------+
Можем да видим, че низът cat
може да се намери на позиция 1, но ние посочихме 6
като изходна позиция. Следователно позицията на следващото появяване на този низ беше тази, която беше върната.
Както при INSTR()
функция, ако поднизът не е намерен, 0
се връща.
ПОЗИЦИЯ()
POSITION()
функцията е синоним на LOCATE()
, но с малко по-различен синтаксис.
Ето синтаксиса:
POSITION(substr IN str)
Това е синоним на следното:
LOCATE(substr,str)
Така че бихме могли да пренапишем един от предишните примери, както следва:
SELECT POSITION('dogs' IN 'Cats and dogs like to run') AS Result;
Резултат:
+--------+ | Result | +--------+ | 10 | +--------+