Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ms sql-Abfrage zum Zählen des Vorkommens von Wörtern in der Textspalte

Sie könnten eine Tabellenwertfunktion erstellen, um Wörter zu analysieren und sie mit Ihrer Abfrage für qQuestion zu verbinden. In Ihrem Schema empfehle ich die Verwendung von varchar(8000) oder varchar(max) statt text . In der Zwischenzeit sollte Ihnen Folgendes den Einstieg erleichtern:

create function [dbo].[fnParseWords](@str varchar(max), @delimiter varchar(30)='%[^a-zA-Z0-9\_]%')
returns @result table(word varchar(max))
begin
    if left(@delimiter,1)<>'%' set @delimiter='%'[email protected];
    if right(@delimiter,1)<>'%' set @delimiter+='%';
    set @str=rtrim(@str);
    declare @pi int=PATINDEX(@delimiter,@str);

    while @pi>0 begin
        insert into @result select LEFT(@str,@pi-1) where @pi>1;
        set @str=RIGHT(@str,len(@str)[email protected]);
        set @pi=PATINDEX(@delimiter,@str);
    end

    insert into @result select @str where LEN(@str)>0;
    return;
end
go

select COUNT(*)
from webqueries q
cross apply dbo.fnParseWords(cast(q.qQuestion as varchar(max)),default) pw
where pw.word not in ('and','is','a','the'/* plus whatever else you need to exclude */)