0

I want to use ContainsTable to get counts on individual words embedded in a t-sql nvarchar column called description. If I provide the criteria of Red Or Green, how can I tell which one actually matched off? In short, i am trying to do word counts and am looking for the best approach.

thanks in advance

Jeremy Danyow
  • 26,470
  • 12
  • 87
  • 133
Mike W
  • 559
  • 8
  • 20

1 Answers1

0

here you go:

drop function dbo.CountOccurrencesOfWord
go

create function dbo.CountOccurrencesOfWord(
    @text varchar(max),
    @word varchar(8000)
)
returns int
as 
begin 
    declare 
        @index int = charindex(@word, @text, 1),
        @len int = len(@word),
        @count int = 0
    while @index > 0  begin             
        set @count = @count + 1
        set @index = charindex(@word, @text, @index + @len)
    end
    return @count
end

GO

if object_id('tempdb..#example') is not null
    drop table #example
create table #example(
    description nvarchar(4000) not null
)

insert into #example select 'red yellow green red white blue red redred red green red'
insert into #example select 'red yellow green red'
insert into #example select 'orange grey green'
insert into #example select ''
insert into #example select 'magenta aqua cyan'

select dbo.CountOccurrencesOfWord(description, 'red'), description
from #example

word of caution- this kind of logic can be quite costly in t-sql.

Jeremy Danyow
  • 26,470
  • 12
  • 87
  • 133
  • Hi could similar logic be used to solve this one: https://stackoverflow.com/questions/47934205/tsql-best-match-logic-possible-to-do-with-one-select-statement-user-functions. Trying to select the TOP row based on most matches. – Hell.Bent Jun 20 '20 at 10:51