Количество вхождений подстроки в строку в SQL

В некоторых задачах SQL бывает необходимо подсчитать количество вхождений подстроки в строку. Самое простое решение в таком случае сводится к следующему алгоритму (строка, в которой ведется поиск – A, подстрока – B):

  1. Определить длину строки A.
  2. Заменить в строке A все подстроки B на пустые подстроки.
  3. Определить длину строки, полученной во втором шаге.
  4. Из длины, полученной на первом шаге вычесть длину, полученный в третьем шаге.
  5. Результат, полученный в четвертом шаге, поделить на длину подстроки 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-функции.

Оставить комментарий

Обязательные поля *

Вы можете использовать следующие HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>