代码之家  ›  专栏  ›  技术社区  ›  Komang

mysql匹配字数

  •  2
  • Komang  · 技术社区  · 16 年前

    如何查询一个字段,特别是在MySQL中,获取匹配单词的计数。 简单地说,我需要得到“搜索项”在字段值中出现的次数。

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

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

    谢谢你

    4 回复  |  直到 16 年前
        1
  •  1
  •   Franck    16 年前

    您可以创建一个直接在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
  •  3
  •   Wobin    16 年前

    是否查找一个给定单词列表的查询,该查询返回数据库字段中匹配单词的数目?

    如:

    数据库表具有

    ID    Terms
    1     cat, dog, bird, horse
    

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

    如果是的话,我建议你检查一下 外部 在SQL中,无论您用什么语言来处理剩余的处理。SQL不是为这一级别的处理而设计的。

    你可以 可能地 使用存储过程在需要检查的单词之间循环,但我怀疑它是否有效或高效。

    当然,如果我误解了你的要求,我可能都错了。

        3
  •  0
  •   Gustavo Rubio    16 年前

    我建议您在SQL外部执行此操作,无论引擎是什么,正则表达式都比SQL语言更适合执行此操作。您可以使用一个视图或其他东西来实现这一点,但是正如我所说,有更多的合适的方法来实现这一点,比如您的语言或正则表达式中的字符串操作类/对象/函数。

        4
  •  0
  •   Kaniu    16 年前

    如果一次只需要搜索一个词,那么这个函数的作用类似于

    select (len(field)-len(replace,find,''))/len(find)
    

    可以在SQL Server中使用,但我不确定MySQL。你还需要处理这个特殊案件 len(find) = 0 .