我在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中应用它的方法。任何帮助非常感谢。
答案 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小提琴。