繁体   English   中英

SQL 统计字段中的字数

[英]SQL count number of words in field

我想做一个 SQL 查询,条件是 column1 包含三个或更多单词。 有什么办法吗?

也许尝试计算空间?

SELECT * 
FROM table
WHERE (LENGTH(column1) - LENGTH(replace(column1, ' ', ''))) > 1

并假设单词是空格数+ 1

如果你想要一个列包含三个或更多单词的条件, 并且你希望它在一堆数据库中工作, 并且我们假设单词由单个空格分隔,那么你可以使用like

where column1 like '% % %'

在Postgres中,你可以使用regexp_split_to_array()

select *
from the_table
where array_length(regexp_split_to_array(the_column, '\s+'), 1) >= 3;

这会将列the_column的内容the_column为数组元素。 使用一个或多个空格作为分隔符。 但它不会尊重“引用”空格。 'one "two three" four'将被计为四个字。

这样做的最好方法是不要这样做。

相反,您应该使用应用程序层在INSERT期间对单词进行计数,并将单词计数保存到其自己的列中。

虽然我喜欢并赞成这里的一些答案,但所有这些答案都会非常缓慢而且不是100%准确。

我知道人们想要一个简单的答案来选择单词计数,但它的准确性和速度都是不可能的。

如果您希望它100%准确,并且速度非常快,那么请使用此解决方案。

要解决的步骤:

  1. 向表中添加一列并将其编入索引: ALTER TABLE tablename ADD COLUMN wordcount INT UNSIGNED NULL, ADD INDEX idxtablename_count (wordcount ASC);
  2. 在进行INSERT之前,请使用您的应用程序计算单词数。 例如在PHP中: $count = str_word_count($somevalue);
  3. 在INSERT期间,为列wordcount包含$count的值,如insert into tablename (col1, col2, col3, wordcount) values (val1, val2, val3, $count);

然后你的选择语句变得超级简单,干净,超快,并且100%准确。

select * from tablename where wordcount >= 3;

还要记住,当您更新任何行时,您需要重新计算该列的单词。

使用 ClickHouse DB,您可以使用 splitByWhitespace() function。

参考: https://clickhouse.com/docs/en/sql-reference/functions/splitting-merging-functions#splitbywhitespaces

这可以工作:

SUM(LENGTH(a) - LENGTH(REPLACE(a, ' ', '')) + 1)

其中a是字符串列。 它将计算空格数,比单词数少1。

对于“n”或更多的单词

select *
from table
where (length(column)- length(replace(column, " ", "")) + 1) >= n

PS:如果单词之间有多个空格,则无效。

要处理多个空格,请使用此处显示的方法

Declare @s varchar(100)
set @s='  See      how many                        words this      has  '
set @s=ltrim(rtrim(@s))

while charindex('  ',@s)>0
Begin
    set @s=replace(@s,'  ',' ')
end

select len(@s)-len(replace(@s,' ',''))+1 as word_count

https://exploresql.com/2018/07/31/how-to-count-number-of-words-in-a-sentence/

我认为大卫在上面钉了它。 但是,作为一个更完整的答案:

LENGTH(RTRIM(LTRIM(REPLACE(column1,'  ', ' ')))) - LENGTH(REPLACE(RTRIM(LTRIM(REPLACE(column1, '  ', ' '))), ' ', '')) + 1 AS number_of_words

这将删除双重空格,以及字符串中的前导和尾随空格。

当然,您可以通过连续添加超过2个空格的替换来进一步...

其他答案似乎都没有考虑到多个空格。 例如,很多人在句子之间使用两个空格; 这些空格计数器会计算每个句子的额外单词。 "Also, scenarios such as spaces around a hyphen - like that. "

就我的目的而言,这要准确得多

SELECT 
  LENGTH(REGEXP_REPLACE(myText, '[ \n\t\|\-]{1,}',' ')) - 
  LENGTH(REGEXP_REPLACE(myText, '[ \n\t\|\-]{1,}', '')) wordCount FROM myTable;

它计算任何一组1 个或多个连续字符: [ space , linefeed , tab , pipe , or hyphen ] 并将其计为一个单词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM