Mysql +计算列中的所有单词

时间:2012-03-29 06:41:29

标签: mysql

我在表格中有两列,我想“粗略地”报告单词总数。 是否可以运行MySQL查询并查找列中的单词总数。

它基本上是由空格或多个空格分隔的任何文本。 不需要100%准确,因为它只是一般指南。

可能的?

THX

4 个答案:

答案 0 :(得分:13)

尝试这样的事情:

SELECT COUNT(LENGTH(column) - LENGTH(REPLACE(column, ' ', '')) + 1)
FROM table

这将计算列中的caracters数量,并减去列中删除所有空格的caracters数量。你知道你的行中有多少个空格,因此知道有多少单词(大致因为你也可以输入一个双重空格,这个数字可以算作两个单词,但是你说你想要它粗糙所以这应该就够了)。

答案 1 :(得分:8)

Count只会为您提供找到的行数。您需要使用SUM。

SELECT SUM(LENGTH(column) - LENGTH(REPLACE(column, ' ', '')) + 1) FROM table

答案 2 :(得分:1)

粗略计算:

SELECT LENGTH(column) - LENGTH(REPLACE(column, SPACE(1), '')) 
FROM
  ( SELECT CONCAT(TRIM(column), SPACE(1)) AS column
    FROM
      ( SELECT REPLACE(column, SPACE(2), SPACE(1)) AS column
        FROM 
          ( SELECT REPLACE(column, SPACE(3), SPACE(1)) AS column
            FROM 
              ( SELECT REPLACE(column, SPACE(5), SPACE(1)) AS column
                FROM 
                  ( SELECT REPLACE(column, SPACE(9), SPACE(1)) AS column
                    FROM 
                      ( SELECT REPLACE(column, SPACE(17), SPACE(1)) AS column
                        FROM 
                          ( SELECT REPLACE(column, SPACE(33), SPACE(1)) AS column
                            FROM tableX
                          ) AS x
                      ) AS x
                  ) AS x
              ) AS x
          ) AS x
      ) AS x
  ) AS x 

答案 3 :(得分:0)

当我自己寻找答案时,我偶然发现了这篇文章,说实话,我已经测试了这里的所有答案,而最接近的答案是@fikre的答案。但是,我担心单词之间有前导空格和/或多余空格的数据(在我的测试过程中,尾随空格似乎对fikre的查询没有影响)。因此,我正在寻找一种方法来识别单词之间的所有空格并将其删除。虽然我使用高级功能找到了一些答案(这超出了我的技能范围),但确实找到了一种非常简单的方法。

tl; dr> @fikre的答案是唯一对我有用的答案,但我做了一些细微的调整,以确保获得最准确的字数。

Query 1 -- This will return 5 "Word Count"
SELECT SUM(LENGTH(input) - LENGTH(REPLACE(input, ' ', '')) + 1) AS "Word Count" FROM
(SELECT TRIM(REPLACE(REPLACE(REPLACE(input,' ','<>'),'><',''),'<>',' ')) AS input
FROM (SELECT ' too   late  to the     party ' AS input) i) r;

Query 2 -- This will return 13 "Word Count"
SELECT SUM(LENGTH(input) - LENGTH(REPLACE(input, ' ', '')) + 1) AS "Word Count" 
FROM (SELECT ' too   late  to the     party ' AS input) i;
-- breakdown ' too   late  to the     party '
   1 leading space= 1 word count
   2 spaces after the first space from the word 'too'= 2 word count
   1 space after the first space from the word 'late'= 1 word count
   4 spaces after the first space from the word 'the'= 4 word count
   trailing space(s) wasn't counted at all.
   Total spaces > 1+2+1+4=8 + 5 word count = 13 

因此,基本上,如果数据行之间甚至包含一百万个空格(免责声明:一种假设。我仅测试了336,896个空格),Query 1仍将返回Word count = 5。

注意:我从这个答案https://stackoverflow.com/a/55476224/10910692中摘录的REPLACE(REPLACE(REPLACE(input,' ','<>'),'><',''),'<>',' ')中段

相关问题