我正在寻找一个 SQL 查询,它会多次列出包含特定字符串的字段。
虽然搜索字符串非常容易,但我确实想根据出现次数对结果进行排序。
select count(*) from bodycontent WHERE body LIKE '%tag%'
我正在寻找一个 SQL 查询,它会多次列出包含特定字符串的字段。
虽然搜索字符串非常容易,但我确实想根据出现次数对结果进行排序。
select count(*) from bodycontent WHERE body LIKE '%tag%'
select
body,
(select count(*) from regexp_matches(body, 'tag', 'gi')) ocurr
from bodycontent
order by ocurr desc
该i
标志将进行不区分大小写的匹配。
选择值的长度减去搜索到的字符串被零长度字符串替换后的值的长度,再除以搜索到的字符串的长度。
http://www.postgresql.org/message-id/20091020172452.GA10593@tux
我在一个中文网站上找到了这个,但至少代码是可读的:
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');
也许其他人有更短的解决方案……甚至更快的解决方案。