PostgreSQL计数子字符串在文本中出现的次数

前端之家收集整理的这篇文章主要介绍了PostgreSQL计数子字符串在文本中出现的次数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写Postgresql函数来计算特定文本子字符串在另一段文本中出现的次数.例如,调用count(‘foobarbaz’,’ba’)应返回2.

我知道要测试是否出现子字符串,我使用类似于下面的条件:

WHERE 'foobarbaz' like '%ba%'

但是,我需要它以’ba’出现的次数返回2.我该怎么办?

在此先感谢您的帮助.

我强烈建议查看我发布到 “How do you count the occurrences of an anchored string using PostgreSQL?”的答案.所选答案显示比regexp_replace()的改编版本慢很多.创建行的开销和运行聚合的开销实在太高了.

最快的方法如下……

SELECT
  (length(str) - length(replace(str,replacestr,'')) )::int
  / length(replacestr)
FROM ( VALUES
  ('foobarbaz','ba')
) AS t(str,replacestr);

在这里,我们

>取字符串L1的长度
>从L1中减去字符串的长度,删除所有替换的L2,得到L3字符串长度的差异.
>将L3除以替换的长度以获得发生

相比之下,这比使用regexp_matches()的方法快了大约五倍.

SELECT count(*)
FROM ( VALUES
  ('foobarbaz',replacestr)
CROSS JOIN LATERAL regexp_matches(str,'g');
原文链接:https://www.f2er.com/postgresql/192762.html

猜你在找的Postgre SQL相关文章