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

MULTI_SEARCH_ALL_POSITIONS

Описание​

Функция MULTI_SEARCH_ALL_POSITIONS выполняет пакетный поиск нескольких подстрок в строке. Возвращает массив с позицией первого вхождения каждой подстроки. Поиск выполняется с учётом регистра.

Синтаксис​

MULTI_SEARCH_ALL_POSITIONS(<haystack>, <needles>)

Параметры​

ПараметрОписание
<haystack>Строка, в которой выполняется поиск. Тип: VARCHAR
<needles>Массив подстрок для поиска. Тип: ARRAY

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

Возвращает значение типа ARRAY, где i-й элемент массива представляет позицию первого вхождения i-й подстроки из <needles> в <haystack>.

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

  • Отсчёт позиций начинается с 1
  • Если подстрока не найдена, для соответствующей позиции возвращается 0
  • Поиск выполняется с учётом регистра
  • Если <haystack> имеет значение NULL, возвращается массив нулей той же длины, что и <needles>
  • Если <needles> имеет значение NULL, возвращается пустой массив [], в том числе когда оба параметра имеют значение NULL
  • Возвращается позиция в байтах, а не позиция n-го символа

Примеры​

  1. Базовое использование: поиск нескольких подстрок
SELECT multi_search_all_positions('Hello, World!', ['Hello', 'World']);
+----------------------------------------------------------+
| multi_search_all_positions('Hello, World!', ['Hello', 'World']) |
+----------------------------------------------------------+
| [1, 8] |
+----------------------------------------------------------+
  1. Поиск с учётом регистра: подстроки в нижнем регистре не найдены
SELECT multi_search_all_positions('Hello, World!', ['hello', '!', 'world']);
+----------------------------------------------------------------------+
| multi_search_all_positions('Hello, World!', ['hello', '!', 'world']) |
+----------------------------------------------------------------------+
| [0, 13, 0] |
+----------------------------------------------------------------------+
  1. Смешанный поиск: найдена часть подстрок
SELECT multi_search_all_positions('Hello, World!', ['Hello', '!', 'xyz']);
+--------------------------------------------------------------------+
| multi_search_all_positions('Hello, World!', ['Hello', '!', 'xyz']) |
+--------------------------------------------------------------------+
| [1, 13, 0] |
+--------------------------------------------------------------------+
  1. Пустой массив
SELECT multi_search_all_positions('Hello', []);
+------------------------------------------+
| multi_search_all_positions('Hello', []) |
+------------------------------------------+
| [] |
+------------------------------------------+
  1. Поддержка специальных символов UTF-8
SELECT multi_search_all_positions('ṭṛì ḍḍumai Hello', ['ṭṛì', 'Hello', 'test']);
+----------------------------------------------------------------------------------------+
| multi_search_all_positions('ṭṛì ḍḍumai Hello', ['ṭṛì', 'Hello', 'test']) |
+----------------------------------------------------------------------------------------+
| [1, 21, 0] |
+----------------------------------------------------------------------------------------+

Входные значения NULL:

SELECT multi_search_all_positions(NULL, ['a', 'b']) AS null_haystack,
multi_search_all_positions('a', NULL) AS null_needles,
multi_search_all_positions(NULL, NULL) AS both_null;
+---------------+--------------+-----------+
| null_haystack | null_needles | both_null |
+---------------+--------------+-----------+
| [0, 0] | [] | [] |
+---------------+--------------+-----------+

Ключевые слова​

MULTI_SEARCH,SEARCH,POSITIONS