Sql server 计算单词在Select语句中出现的次数

Sql server 计算单词在Select语句中出现的次数,sql-server,Sql Server,这个问题在这个论坛上被问了很多次,但我还没有找到我想要的解决方案。 基本上我想要这个SAS解决方案 Select CNT=count(Rules ,'Section'); 要翻译成SQL,我只是感到惊讶的是,似乎还没有一个像SAS这样简洁的解决方案。 我最接近的是: Select DATALENGTH([Rules])- DATALENGTH(replace([Rules], 'Section', '')) as CNT

这个问题在这个论坛上被问了很多次,但我还没有找到我想要的解决方案。 基本上我想要这个SAS解决方案

Select CNT=count(Rules ,'Section');
要翻译成SQL,我只是感到惊讶的是,似乎还没有一个像SAS这样简洁的解决方案。 我最接近的是:

Select  DATALENGTH([Rules])-  DATALENGTH(replace([Rules], 'Section', ''))  as CNT                                    
FROM [M].[dbo].[file] 
但是它仍然不计算“Section”这个词在变量[Rules]中出现的频率——实际上我在这里甚至不确定它的数量,因为我无法计算出来。变量/列[Rules]是一个varchar,可以有许多节描述。我只需要数一数这些部分。因此,我需要计算[规则]中的单词部分。我真的被这件事缠住了

[规则]的外观示例如下:

您当前的查询:

Select  DATALENGTH([Rules])-  DATALENGTH(replace([Rules], 'Section', ''))  as CNT
FROM [M].[dbo].[file] 
它的作用是,在删除单词部分的每个实例后,获取规则的长度并从中减去字符串的长度

这是一种不太直观的方法来计算字符串中是否存在单个字符,但是,当您将一个包含7个字母的单词替换为一个空格时,您将从该单词的每个实例的长度中减去7。因此,如果单词出现一次,则差值为7;当它出现两次时,差值为14;等等说明:

a: This is a section here <== len = 22
   ----------------------

b: This is a here <= after replace, len = 15
   --------------

len(a) - len(b) = 22 - 15 = 7
你也可以——我不建议这样做,因为这根本不是自我记录——用6个字母的单词替换7个字母的单词:

SELECT (LEN([Rules])-LEN(replace([Rules], 'Section', '6chars'))) AS CNT
------------------------------------------------------^^^^^^^
  FROM [dbo].[file];
SELECT (LEN([Rules])-LEN(replace([Rules], 'Section', '6chars'))) AS CNT
------------------------------------------------------^^^^^^^
  FROM [dbo].[file];