SQL计数字段中的单词数

时间:2015-01-07 19:43:21

标签: mysql sql sql-server-2008 postgresql

我想进行SQL查询,条件是column1包含三个或更多单词。有什么可以做的吗?

8 个答案:

答案 0 :(得分:18)

也许尝试计算空间?

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

并假设单词是空格数+ 1

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

执行此操作的最佳方法是不要这样做。

相反,您应该使用应用程序层在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期间,请为$countwordcount添加insert into tablename (col1, col2, col3, wordcount) values (val1, val2, val3, $count);的值,例如select * from tablename where wordcount >= 3;
  4. 然后你的选择语句变得超级简单,干净,超快,并且100%准确。

    {{1}}

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

答案 3 :(得分:1)

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

where column1 like '% % %'

答案 4 :(得分:0)

这可行:

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

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

答案 5 :(得分:0)

对于" n"或更多的话

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

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

答案 6 :(得分:0)

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

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/

答案 7 :(得分:0)

我认为戴维在上面钉了一下。但是,作为更完整的答案:

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

这将删除字符串中的双精度空格以及开头和结尾的空格。

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