gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:37:46 27 4
gpt4 key购买 nike

我正在编写一个 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);

我们在这里

  1. 取字符串的长度,L1
  2. L1中减去删除所有替换后的字符串长度 L2得到L3字符串长度的差异。
  3. 划分L3通过替换的长度得到 occurrences

相比使用 regexp_matches() 的方法,快五倍看起来像这样。

SELECT count(*)
FROM ( VALUES
('foobarbaz', 'ba')
) AS t(str, replacestr)
CROSS JOIN LATERAL regexp_matches(str, replacestr, 'g');

关于sql - PostgreSQL 计算子字符串在文本中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com