В некоторых задачах SQL бывает необходимо подсчитать количество вхождений подстроки в строку. Самое простое решение в таком случае сводится к следующему алгоритму (строка, в которой ведется поиск – A, подстрока – B):
- Определить длину строки A.
- Заменить в строке A все подстроки B на пустые подстроки.
- Определить длину строки, полученной во втором шаге.
- Из длины, полученной на первом шаге вычесть длину, полученный в третьем шаге.
- Результат, полученный в четвертом шаге, поделить на длину подстроки B.
Оформим приведенный алгоритм в t-SQL в виде функции с двумя параметрами, где переменная @where – это строка A, а @what – подстрока B:
create function [dbo].[substring_cnt] (@where varchar(max), @what varchar(100)) returns int as begin return ((datalength(@where) - datalength(replace(@where, @what, ''))) / datalength(@what)) end
.
В своей следующей записи я покажу как реализовать приведенную в этой статье функцию в виде CLR-функции.