簡體   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