【问题标题】:mysql count word in sql syntax [duplicate]mysql在sql语法中计算单词[重复]
【发布时间】:2012-08-22 19:49:15
【问题描述】:

让我们来一个简单的查询:

SELECT myfield
FROM   mytable
WHERE  criteria

例如,上面的查询给了我们 10 行的结果。字段myField 是一个文本字段。

我的问题是:是否可以更改上述查询并获得myField 字段的总字数?

已编辑:总字数是指查询中所有选定字段的总字数,在所有行中

示例

+------------------------------+-------+
| sentence                     | Words |
+------------------------------+-------+
| Hello World                  |     2 |
| Hello World                  |     2 |
| Mary had a little lamb       |     5 |
| Her fleece was white as snow |     6 |
| Everywhere that mary went    |     4 |
| Umm, sheep followed her      |     4 |
+------------------------------+-------+

【问题讨论】:

  • 这个问题很混乱。请提供一个小数据示例和预期结果。
  • 到目前为止 - 3 种不同的解释。我休息一下。
  • @Andrius Naruševičius 为什么会让人困惑?我要求一种方法来获取列的总字数。混乱在哪里?
  • @andrew 您能否详细说明您的问题以消除混淆..?实际上,您希望 myfield 的每个单元格中的单词总数或 myfeild 下的单元格总数满足条件。?
  • @andrew 请看一下接受的答案。然后对比一下视觉例子,这真的很容易理解问题中措辞不佳的句子(无冒犯)。另外,由于我的评论多次被点赞,我会说不是我这么想的。尽可能尝试添加示例,以消除任何潜在的误解。 :)

标签: mysql


【解决方案1】:

在您的查询中使用来自@otis 的this question 的出色功能:

mysql> select * from test;
+----+------------------------------+
| id | sentence                     |
+----+------------------------------+
|  0 | Hello World                  |
|  1 | Hello World                  |
|  2 | Mary had a little lamb       |
|  3 | Her fleece was white as snow |
|  4 | Everywhere that mary went    |
|  5 | Umm, sheep followed her      |
+----+------------------------------+
6 rows in set (0.00 sec)

mysql> SELECT sentence, wordcount(sentence) as "Words" from test;
+------------------------------+-------+
| sentence                     | Words |
+------------------------------+-------+
| Hello World                  |     2 |
| Hello World                  |     2 |
| Mary had a little lamb       |     5 |
| Her fleece was white as snow |     6 |
| Everywhere that mary went    |     4 |
| Umm, sheep followed her      |     4 |
+------------------------------+-------+
6 rows in set (0.02 sec)

要使函数工作,你需要在 MySQL 中执行函数的声明。就像执行任何其他查询一样:

mysql> DELIMITER $$
mysql> CREATE FUNCTION wordcount(str TEXT)
            RETURNS INT
            DETERMINISTIC
            SQL SECURITY INVOKER
            NO SQL
       BEGIN
         DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
         DECLARE currChar, prevChar BOOL DEFAULT 0;
         SET maxIdx=char_length(str);
         WHILE idx < maxIdx DO
             SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
             IF NOT prevChar AND currChar THEN
                 SET wordCnt=wordCnt+1;
             END IF;
             SET prevChar=currChar;
             SET idx=idx+1;
         END WHILE;
         RETURN wordCnt;
       END
     $$
Query OK, 0 rows affected (0.10 sec)

mysql> DELIMITER ;

【讨论】:

  • 是的,但也许 OP 不知道如何将该函数应用于他们的查询。
  • 鉴于您具有编辑权限,也许您可​​以编辑该答案以提供使用示例,然后在评论中链接到它。也许吧。
  • 你的意思是不是贴出的例子?
  • @BurhanKhalid 问题本身没有示例。有一个查询根本没有帮助,因为这至少可以用两种方式解释。由于您可以编辑问题中有价值的所有内容,因此我建议您将自己的示例移至问题中。否则,您的回答可能对我们所有人来说都是一个很好的 wiki,我们对此表示赞赏,但它不能回答问题,因为问题措辞不佳。
猜你喜欢
  • 2013-12-09
  • 2019-10-16
  • 2013-12-06
  • 2011-04-25
  • 1970-01-01
  • 2013-09-21
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多