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