Sql server 2008 ms sql查询文本列中单词的出现次数

Sql server 2008 ms sql查询文本列中单词的出现次数,sql-server-2008,text,count,Sql Server 2008,Text,Count,我有一个名为webqueries的表,其中一列名为qQuestion,数据类型为textsql server 2008。我想对qQuestion中使用的单词(不包括“and”、“is”等)进行计数。我的目标是查看一个人对特定产品提出问题的次数。您可以创建一个表值函数来解析单词,并将其连接到针对qQuestion的查询中。在您的模式中,我建议使用varchar8000或varcharmax而不是文本。同时,您应该从以下几点开始: create function [dbo].[fnParseWord

我有一个名为webqueries的表,其中一列名为qQuestion,数据类型为textsql server 2008。我想对qQuestion中使用的单词(不包括“and”、“is”等)进行计数。我的目标是查看一个人对特定产品提出问题的次数。

您可以创建一个表值函数来解析单词,并将其连接到针对qQuestion的查询中。在您的模式中,我建议使用varchar8000或varcharmax而不是文本。同时,您应该从以下几点开始:

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='%'+@delimiter;
    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)-@pi);
        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 */)

你能举一个例子和样本输出吗?如果你不知道,文本数据类型正在贬值,请考虑改为VARCHAR。从[Web2012011DISMIC2]([DBO])[QBy]中选择[QBy],[QWebQue]按QuyRID DESC的QuyID ID QQuall 67745订购。我想知道我必须每天花3美元的创可贴的价格。67744您愿意为我们提供您的班机样品吗?谢谢!我刚刚更改了select查询以查找表中的停止字,并在select:>select COUNT*wordcount,pw.word>from[dbo].[WebQueries]q>cross apply dbo.fnprassewordsq.qQuestion,default pw>where pw.word not in select stopword from[dbo].[stopwords]>按pw.word分组>按wordcount desc排序