我正在编写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.jb51.cc/postgresql/192762.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。