如何找到哪些postgresql文本字段确实包含特定字符串的大多数出现?

时间:2013-07-12 12:09:47

标签: postgresql

我正在寻找一个SQL查询,它会列出包含特定字符串次数的字段。

虽然搜索字符串非常容易,但我确实希望根据出现次数对结果进行排序。

select count(*) from bodycontent WHERE body LIKE '%tag%'

3 个答案:

答案 0 :(得分:2)

select
    body,
    (select count(*) from regexp_matches(body, 'tag', 'gi')) ocurr
from bodycontent
order by ocurr desc

i标志将进行不区分大小写的匹配。

答案 1 :(得分:1)

在搜索到的字符串被零长度字符串替换后,选择值的长度减去值的长度除以搜索到的字符串的长度。

http://www.postgresql.org/message-id/20091020172452.GA10593@tux

答案 2 :(得分:0)

我在中文网站上发现了这个,但至少代码是可读的:

create or replace function regexp_count(str text,search text) returns int as $$
declare
  str_len int;
  search_len int;
  i int;
begin
  str_len := length(str);
  search_len := length(search);
  i := 0;
  for x in 1..str_len-search_len+1 loop
    if substr(str, x, search_len) = search then
      i := i+1;
    end if;
  end loop;
  return i;
end;
$$ language plpgsql strict;


 select * from regexp_count('i am digoal test test', 'test');

也许其他人有更短的解决方案......甚至更快的解决方案。