我可以使用哪些MySQL功能?
例如,
我可以使用什么Mysql功能?
包含6个单词。
答案 0 :(得分:3)
我知道没有内置的函数,但我在MySQL的String Functions文档的评论中发现了这一点:
我在mysql中寻找word_count(“string”),最后想出了一个用户定义的函数,对我来说非常有用,注意:我用的是实际空间。
DROP FUNCTION IF EXISTS word_count;
CREATE FUNCTION word_count (f_string text(5000)) RETURNS smallint(10)
BEGIN
DECLARE new_string text(5000);
WHILE INSTR(f_string,'<space><space>')>0
DO
SET new_string=(select REPLACE(f_string,'<space><space>','<space>'));
SET f_string=new_string;
END WHILE;
RETURN (select LENGTH(TRIM(f_string))-LENGTH(REPLACE(TRIM(f_string),'<space>',''))+1);
END
//
结果如下
的MySQL&GT;选择word_count(“Balaji Devarajan”)WORD_COUNT;
+------------+
| WORD_COUNT |
+------------+
| 2 |
+------------+
1 row in set (0.00 sec)
的MySQL&GT;选择word_count(“Balaji Devarajan”)WORD_COUNT;
+------------+
| WORD_COUNT |
+------------+
| 2 |
+------------+
1 row in set (0.00 sec)
的MySQL&GT;选择word_count(“Balaji Devarajan”)WORD_COUNT;
+------------+
| WORD_COUNT |
+------------+
| 2 |
+------------+
1 row in set (0.01 sec)
答案 1 :(得分:1)
没有函数来计算MySQL(或ANSI SQL,或我熟悉的任何其他DBMS)中的单词。
你可以通过使用字符串替换来计算文本中的空格数,可能伪造它:
SELECT LENGTH(colname)-LENGTH(REPLACE(colname, ' ', ''))+1 AS wordcount FROM tablename;
这不是真正的单词计数,但只要每个单词只用一个空格分隔就可以工作。
为了获得更好的单词匹配,你需要一个正则表达式,但MySQL中没有正则表达式替换,所以你不能使用替换技巧。您可以使用REGEXP
/ RLIKE
匹配选择具体的6字长值:
SELECT * FROM tablename WHERE colname RLIKE '^[^[:alnum:]]*[[:alnum:]]+([^[:alnum:]]+[[:alnum:]]+){5}[^[:alnum:]]*$';
无论哪种方式,这都很慢。每次执行查询时,必须在表的每一行上执行字符串替换或正则表达式匹配。如果单词数是您经常进行的查询,则需要通过添加(可能是索引的)列来存储单词数来优化(非规范化)表。