Последнее обновление
COUNT_SUBSTRINGS
Описание
Функция COUNT_SUBSTRINGS подсчитывает количество вхождений заданной подстроки в строку. Примечание: при обнаружении совпадения текущая реализация продолжает поиск, смещаясь на длину подстроки. Например, при str='ccc' и pattern='cc' возвращается результат 1.
Синтаксис
COUNT_SUBSTRINGS(<str>, <pattern>[, <start_pos>])
Параметры
| Параметр | Описание |
|---|---|
<str> | Строка, в которой выполняется поиск. Тип: STRING |
<pattern> | Подстрока для поиска. Тип: STRING |
<start_pos> | Позиция начала поиска (нумерация с 1). Тип: INT. Необязательный параметр |
Возвращаемое значение
Возвращает значение типа INT, равное количеству вхождений подстроки в строку.
Особые случаи:
- Если str имеет значение NULL, возвращается NULL
- Если pattern является пустой строкой, возвращается 0
- Если str является пустой строкой, возвращается 0
- Если start_pos меньше или равен 0 либо превышает длину строки, возвращается 0
- Если pattern длиннее str (или оставшейся части str, начиная с позиции start_pos), возвращается 0
Изменение поведения (4.1.4)
В версии 4.1.4 исправлена ошибка поиска совпадения с выходом за границы строки: если оставшихся символов не хватало для полной подстроки pattern, предыдущие версии могли всё же засчитать одно лишнее вхождение. Например, count_substrings('ab', 'abc') в предыдущих версиях мог возвращать 1, а после исправления корректно возвращает 0; count_substrings('ccc', 'cc', 3) после исправления возвращает 0.
Примеры
- Базовое использование
SELECT count_substrings('a1b1c1d', '1');
+----------------------------------+
| count_substrings('a1b1c1d', '1') |
+----------------------------------+
| 3 |
+----------------------------------+
- Пример с последовательными запятыми
SELECT count_substrings(',,a,b,c,', ',');
+-----------------------------------+
| count_substrings(',,a,b,c,', ',') |
+-----------------------------------+
| 5 |
+-----------------------------------+
- Пример с перекрывающимися подстроками
SELECT count_substrings('ccc', 'cc');
+--------------------------------+
| count_substrings('ccc', 'cc') |
+--------------------------------+
| 1 |
+--------------------------------+
- Обработка значения NULL
SELECT count_substrings(NULL, ',');
+-----------------------------+
| count_substrings(NULL, ',') |
+-----------------------------+
| NULL |
+-----------------------------+
- Обработка пустой строки
SELECT count_substrings('a,b,c,abcde', '');
+-------------------------------------+
| count_substrings('a,b,c,abcde', '') |
+-------------------------------------+
| 0 |
+-------------------------------------+
- Использование параметра начальной позиции
SELECT count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 1),
count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 6);
+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
| count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 1) | count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 6) |
+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
| 2 | 1 |
+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
- Начальная позиция вне допустимого диапазона
SELECT count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 0),
count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 30);
+------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
| count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 0) | count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 30) |
+------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
| 0 | 0 |
+------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
- Многобайтовая китайская подстрока с указанием начальной позиции
SELECT count_substrings('你好,世界!你好,世界!', '世界', 0),
count_substrings('你好,世界!你好,世界!', '世界', 30);
+-----------------------------------------------------------------------+------------------------------------------------------------------------+
| count_substrings('你好,世界!你好,世界!', '世界', 0) | count_substrings('你好,世界!你好,世界!', '世界', 30) |
+-----------------------------------------------------------------------+------------------------------------------------------------------------+
| 0 | 0 |
+-----------------------------------------------------------------------+------------------------------------------------------------------------+