SQL 服务器 2014 字数统计

SQL Server 2014 Word Count

我有一个正在搜索关键字的 SQL 服务器数据库。

我只需要知道一列中出现了多少关键字。

例如

red,green,blue

如果该列看起来像这样

I like red shoes but not blue

它会 return 数字 2

如果该列看起来像这样

I like red shoes and green shoes, but green are my favourite

它还会 return 数字 2

虽然一个关键字被找到了两次,但还是找到了 2 个关键字。

我愿意使用全文索引或任何需要的东西,但我卡住了。

试试这个

WITH C(txt) AS(
  SELECT 'I like red shoes but not blue'
  UNION
  SELECT 'I like red shoes and green shoes, but green are my favourite'
)
SELECT COUNT(txt)
FROM C WHERE txt LIKE '%green%'
OR txt LIKE '%blue%'
OR txt LIKE '%red%'

这会起作用

     create table #temp(color varchar(500))
insert into #temp(color) values('red')
insert into #temp(color) values('green')
insert into #temp(color) values('blue')

Create table #temp2(string varchar(max))
insert into #temp2(string) values('I like red shoes and green shoes, but green are my favourite')
insert into #temp2(string) values('I like red shoes and green shoes')

select string,count(*) from #temp inner join #temp2 on PATINDEX('%'+color+'%',string)>0
group by string

您可以为此使用字符串拆分器。这是 Jeff Moden 的 DelimitedSplit8K 函数。

DECLARE @str VARCHAR(8000) = 'I like red shoes and green shoes, but green are my favourite'

SELECT
    COUNT(DISTINCT ITEM)
FROM dbo.DelimitedSplit8K(@str, ' ')
WHERE
    Item IN('red', 'green', 'blue')

SQL Fiddle

试试这个

SELECT b.LineText, count(*) from 
FROM
(
select 'RED' Colors
union
select 'GREEN'
union
select 'BLUE'
) a
JOIN
(
SELECT 'I like red shoes but not blue' LineText
UNION
SELECT 'I like red shoes and green shoes, but green are my favourite'
) b ON b.LineText LIKE '%'+a.Colors+'%'
group by b.LineText