MySQL计数匹配单词

时间:2008-11-27 03:01:53

标签: sql mysql database

如何查询以获取字段中匹配单词的计数,特别是在MySQL中。 我只需要知道“搜索词”出现在字段值中的次数。

例如,值是“一两两”,所以当我搜索单词“one”时,它应该给我3个

有可能吗?因为目前我只是从数据库中提取数值并使用服务器端语言进行计数。

谢谢

4 个答案:

答案 0 :(得分:3)

您是否希望找到一个查询,给定一个单词列表,返回数据库字段中匹配单词的数量?

例如:

数据库表有

ID    Terms
1     cat, dog, bird, horse

然后检查单词“cat,horse”返回2?

如果是这样,我建议您检查SQL的外部,无论您正在进行其余处理的语言是什么.SQL不是为此级别的处理而设计的。

可能使用存储过程来循环查看您需要检查的单词,但我怀疑它是否有效或高效。

当然,如果我误解了你的要求,我可能会错的=)

答案 1 :(得分:1)

您可以创建一个直接在SQL中使用的函数,以便一步完成。

以下是a function which I found on the MySQL website

delimiter ||
DROP FUNCTION IF EXISTS substrCount||
CREATE FUNCTION substrCount(s VARCHAR(255), ss VARCHAR(255)) RETURNS TINYINT(3) UNSIGNED LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE count TINYINT(3) UNSIGNED;
DECLARE offset TINYINT(3) UNSIGNED;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = NULL;

SET count = 0;
SET offset = 1;

REPEAT
IF NOT ISNULL(s) AND offset > 0 THEN
SET offset = LOCATE(ss, s, offset);
IF offset > 0 THEN
SET count = count + 1;
SET offset = offset + 1;
END IF;
END IF;
UNTIL ISNULL(s) OR offset = 0 END REPEAT;

RETURN count;
END;

||

delimiter ;

您应该像这样使用它:

SELECT substrCount('one two one onetwo', 'one') `count`; // Returns 3

答案 2 :(得分:0)

我建议您在SQL之外执行此操作,无论引擎如何,正则表达式比SQL语言更适合这种情况。您可以使用视图或其他内容执行此操作,但正如我所说,有更多正确的方法可以像您的语言或正则表达式中的字符串操作类/对象/函数一样。

答案 3 :(得分:0)

如果您只需要一次搜索一个术语,则执行类似

的功能
select (len(field)-len(replace,find,''))/len(find)

可以在sql server中工作,但我不确定MySQL。您还需要处理特殊情况len(find) = 0