我正在寻找一个SQL查询,它会列出包含特定字符串次数的字段。
虽然搜索字符串非常容易,但我确实希望根据出现次数对结果进行排序。
select count(*) from bodycontent WHERE body LIKE '%tag%'
答案 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');
也许其他人有更短的解决方案......甚至更快的解决方案。