Перейти к содержимому
Последнее обновление

POSITION

Описание​

Функция POSITION находит позицию подстроки в основной строке. Отсчёт позиций начинается с 1.

Синтаксис​

POSITION(<substr> IN <str>)

POSITION(<substr>, <str> [, <pos>])

Параметры​

ПараметрОписание
substrПодстрока для поиска. Тип: VARCHAR
strОсновная строка, в которой выполняется поиск. Тип: VARCHAR
posНеобязательный параметр, задающий начальную позицию (отсчёт с 1). Если указан, поиск начинается с этой позиции

Возвращаемое значение​

Возвращает значение типа INT, обозначающее позицию первого вхождения подстроки в основную строку.

Правила поиска:

  • Возвращает индекс позиции, отсчёт которого начинается с 1
  • Если подстрока не найдена, возвращает 0
  • Если указана начальная позиция, поиск начинается с этой позиции
  • Поиск выполняется с учётом регистра

Особые случаи:

  • Если любой из параметров равен NULL, возвращает NULL
  • Если подстрока является пустой строкой, возвращает 1 (или начальную позицию)
  • Если начальная позиция превышает длину строки, возвращает 0
  • Если начальная позиция отрицательная, поиск выполняется с начала строки

Примеры​

  1. Базовый поиск (две формы синтаксиса)
SELECT POSITION('bar' IN 'foobarbar'), POSITION('bar', 'foobarbar');
+----------------------------------+--------------------------------+
| POSITION('bar' IN 'foobarbar') | POSITION('bar', 'foobarbar') |
+----------------------------------+--------------------------------+
| 4 | 4 |
+----------------------------------+--------------------------------+
  1. Поиск с указанием начальной позиции
SELECT POSITION('bar', 'foobarbar', 5), POSITION('xbar', 'foobar');
+-----------------------------------+----------------------------------+
| POSITION('bar', 'foobarbar', 5) | POSITION('xbar', 'foobar') |
+-----------------------------------+----------------------------------+
| 7 | 0 |
+-----------------------------------+----------------------------------+
  1. Обработка значений NULL
SELECT POSITION('test' IN NULL), POSITION(NULL, 'test');
+--------------------------+------------------------+
| POSITION('test' IN NULL) | POSITION(NULL, 'test') |
+--------------------------+------------------------+
| NULL | NULL |
+--------------------------+------------------------+
  1. Обработка пустых строк
SELECT POSITION('' IN 'hello'), POSITION('world' IN '');
+------------------------+------------------------+
| POSITION('' IN 'hello') | POSITION('world' IN '') |
+------------------------+------------------------+
| 1 | 0 |
+------------------------+------------------------+
  1. Поиск с учётом регистра
SELECT POSITION('World' IN 'Hello World'), POSITION('world' IN 'Hello World');
+----------------------------------+----------------------------------+
| POSITION('World' IN 'Hello World') | POSITION('world' IN 'Hello World') |
+----------------------------------+----------------------------------+
| 7 | 0 |
+----------------------------------+----------------------------------+
  1. Поиск с разных позиций
SELECT POSITION('a', 'banana', 1), POSITION('a', 'banana', 3);
+-----------------------------+-----------------------------+
| POSITION('a', 'banana', 1) | POSITION('a', 'banana', 3) |
+-----------------------------+-----------------------------+
| 2 | 4 |
+-----------------------------+-----------------------------+
  1. Многобайтовые символы UTF-8
SELECT POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello'), POSITION('hello', 'ṭṛì ḍḍumai hello', 8);
+-------------------------------------------------------+---------------------------------------------------+
| POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello') | POSITION('hello', 'ṭṛì ḍḍumai hello', 8) |
+-------------------------------------------------------+---------------------------------------------------+
| 5 | 12 |
+-------------------------------------------------------+---------------------------------------------------+
  1. Поиск специальных символов
SELECT POSITION('@' IN 'user@domain.com'), POSITION('.', 'user@domain.com', 10);
+----------------------------------+--------------------------------------+
| POSITION('@' IN 'user@domain.com') | POSITION('.', 'user@domain.com', 10) |
+----------------------------------+--------------------------------------+
| 5 | 12 |
+----------------------------------+--------------------------------------+
  1. Начальная позиция за пределами строки
SELECT POSITION('test', 'hello world', 20), POSITION('test', 'hello world', 0);
+--------------------------------------+-------------------------------------+
| POSITION('test', 'hello world', 20) | POSITION('test', 'hello world', 0) |
+--------------------------------------+-------------------------------------+
| 0 | 0 |
+--------------------------------------+-------------------------------------+
  1. Поиск в строках с числами и символами
SELECT POSITION('123' IN '456123789'), POSITION('-', 'phone: 123-456-7890', 11);
+------------------------------+-------------------------------------------+
| POSITION('123' IN '456123789') | POSITION('-', 'phone: 123-456-7890', 11) |
+------------------------------+-------------------------------------------+
| 4 | 11 |
+------------------------------+-------------------------------------------+