计算SQL Server列中模式的出现次数

时间:2017-12-10 15:33:43

标签: sql sql-server regex

我在SQL Server 2012中有一个varchar列,其中包含三个字母的模式,如下所示:

DECLARE @str VARCHAR(MAX) = 'POKPOKPOKHRSPOKPOKPOKPOKPOKPOIHEFHEFPOKPOHHRTHRT'

我需要一个查询来搜索和计算该字符串中模式POK的出现次数。诀窍是,所有POK在一起必须计为一个。所以,在上面的字符串中有3"链" POK

POKPOKPOK, interrupted by a HRS
POKPOKPOKPOKPOK, interrupted by a POI
POK, interrupted by a POH

所以,我想要的结果是3.如果我使用以下查询,我得到9,这是字符串中的总POK,这不是我需要的。

SELECT (LEN(@str) - LEN(REPLACE(@str, 'POK', '')))/LEN('POK')

我认为我需要某种正则表达式来隔离POK然后计数,但无法找到在SQL Server中应用它的方法。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:1)

这不是你想在SQL中做的事情。但是你可以。以下是将相邻'POK'减少为单个POK的一种方法:

select replace(replace(@str, 'POK', '<POK>'), 'POK><', '')

嗯,这实际上创建了一个'<POK>',但这对我们的目的来说很好。

现在,您可以搜索:

select (len(replace(replace(@str, 'POK', '<POK>'), 'POK><', '')) -
        len(replace(replace(replace(@str, 'POK', '<POK>'), 'POK><', ''), 'POK', ''))
       ) / 3

Here是一个SQL小提琴。