[英]Count the number of multiple words occurrences within a text field in mysql
[英]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%准確,並且速度非常快,那么請使用此解決方案。
要解決的步驟:
ALTER TABLE tablename ADD COLUMN wordcount INT UNSIGNED NULL, ADD INDEX idxtablename_count (wordcount ASC);
。 $count = str_word_count($somevalue);
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。
這可以工作:
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.