查询以计算单词 SQLite 3

Posted

技术标签:

【中文标题】查询以计算单词 SQLite 3【英文标题】:Query to count words SQLite 3 【发布时间】:2011-03-18 15:38:57 【问题描述】:

有没有办法计算文本字符串中的单词数?

我正在使用 SQLite 3,我正在尝试编写一个查询,该查询需要一堆长文本字符串,并计算每个文本中的单词数。

我还想忽略 html 标记(或插入符号之间的任何内容),例如段落标记、中断标记等。

因此,当我从相应列中选择文本运行查询时,我会得到一个包含一些 html 标记的冗长文本输出,我只想计算单词。

如何编写查询来执行此操作?

【问题讨论】:

非常相关:string - How to count instances of character in SQL Column - Stack Overflow -- (只算空格数加一,只要字符串开头或结尾没有双空格/空格) 【参考方案1】:

@Ziferius 的回答有一个小的语法错误,以下是一个有效的,我自己测试的。

SELECT someStr,   CASE WHEN length(someStr) >= 1   
THEN 
    (length(someStr) - length(replace(someStr, ' ', ''))) + 1   
ELSE 
    (length(someStr) - length(replace(someStr, ' ', '')))   
END as NumOfWords FROM someTable;

【讨论】:

【参考方案2】:

前面的答案对于空白列是不正确的。您需要在您的选择中添加 case/when/then 语句:

SELECT someStr,
  CASE WHEN length(someStr) >= 1
  THEN
    (length(someStr) - length(replace(someStr), ' ', '')) + 1
  ELSE
    (length(someStr) - length(replace(someStr), ' ', ''))
  END as NumOfWords
FROM someTable;

已编辑:如果该列有 0 个空格,但其中有一个单词,则会错误地报告 0。更改条件以允许它。

来源:An Excel Trick I used to do the same thing

【讨论】:

【参考方案3】:

据我所知,在 SQL lite 3 中没有办法直接统计字符串中的单词数。(我比较熟悉 mysql 和 ms sql)

您可以使用 Length 和 Replace 作为解决方法

 SELECT length(@String) - length(replace(@String, ' ', '')) + 1

【讨论】:

以上是关于查询以计算单词 SQLite 3的主要内容,如果未能解决你的问题,请参考以下文章

rails 3 sqlite 通过占位符在查询中传递数组

Python 3 SQLite3 - 绑定数量不正确

Rails 3 SQLite3 布尔值 false

快速查询 sqlite 数据库的更好方法

Swift 3 sqlite/使用数据库?

erlang-sqlite3 sqlite3:table_info 错误