我想进行SQL查询,条件是column1包含三个或更多单词。有什么可以做的吗?
答案 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%准确且非常快,请使用此解决方案。
要解决的步骤:
ALTER TABLE tablename ADD COLUMN wordcount INT UNSIGNED NULL, ADD INDEX idxtablename_count (wordcount ASC);
。$count = str_word_count($somevalue);
$count
列wordcount
添加insert into tablename (col1, col2, col3, wordcount) values (val1, val2, val3, $count);
的值,例如select * from tablename where wordcount >= 3;
然后你的选择语句变得超级简单,干净,超快,并且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个空格的替换项来做更进一步...