1

我被要求搜索特定字符串并生成一个列表,其中描述字段包含该字符串。不是问题。在这种情况下,我使用了 LIKE '%man%',它给出了一组包含 'man' 的记录。这也给出了“manage”、“management”、“mankind”等的出现。我想找到一个记录集,其中包含找到的单词列表,其中包括“man”和出现次数。这在 SQL 2008 中可行吗?如果是这样,你能指出我正确的方向吗?

4

3 回答 3

0

我想你想要这样的东西。

create table Words(text varchar(50))

insert into Words Values('man')
insert into Words Values('management')
insert into Words Values('man')
insert into Words Values('management')
insert into Words Values('mankind')
insert into Words Values('manpower')

select temptable.text, count(temptable.text) as 'count'
from
(select text 
from Words
where text like '%man%') as temptable
group by temptable.text

http://www.sqlfiddle.com/#!3/a6cdc/1

于 2014-12-18T17:56:27.480 回答
0

怎么样:

CREATE TABLE #temp
(
[Description] varchar(250)
)

INSERT INTO #temp
VALUES
    ('a small step for mankind'),
    ('my manager says'),
    ('you might manage to purchase this'),
    ('try to manage this'),
    ('he was a small man'),
    ('no woman no cry'),
    ('no words can describe')



;
WITH CTE
As
(
    SELECT *, CHARINDEX('man',[Description] ) startPos, CHARINDEX(' ', [Description], CHARINDEX('man',[Description] )) endPos
    FROM #temp
    WHERE [Description] LIKE '%man%'
),
WordCTE
AS
(
    SELECT [Description], 
            CASE 
                WHEN endPos = 0 THEN SUBSTRING([Description], startpos, 100) 
                ELSE SUBSTRING([Description], startpos, endPos - startPos) 
            END AS [Word]
    FROM CTE
)
SELECT [Word], COUNT(*)
FROM WordCTE
GROUP BY [Word]
于 2014-12-18T17:43:38.810 回答
0

你的问题很模糊,你想要输出什么也不清楚。看看这样的事情是否会为您指明正确的方向。

declare @ValueToFind varchar(20) = 'man'

select * 
    , ABS((DATALENGTH(replace(SomeValue, @ValueToFind, ''))) - DATALENGTH(SomeValue)) / DATALENGTH(@ValueToFind)
from (Values('manage manager manman'), ('management'), ('mankind manfred'), ('none here')) v(SomeValue)
于 2014-12-18T17:21:51.097 回答