如何计算 PostgreSQL 中字符串中子字符串的出现次数?
例子:
我有一张桌子
CREATE TABLE test."user"
(
uid integer NOT NULL,
name text,
result integer,
CONSTRAINT pkey PRIMARY KEY (uid)
)
我想编写一个查询,以便 result
包含列有多少次出现的子字符串 o
列 name
包含。 For instance, if in one row, name
is hello world
, the column result
should contain 2
, since there are two o
在字符串 hello world
中。
换句话说,我正在尝试编写一个将作为输入的查询:
并更新 result
列:
我知道函数 regexp_matches
及其 g
选项,这表明需要扫描完整的( g
= global)字符串是否存在子字符串的出现)。
例子:
SELECT * FROM regexp_matches('hello world', 'o', 'g');
返回
{o}
{o}
和
SELECT COUNT(*) FROM regexp_matches('hello world', 'o', 'g');
返回
2
但是我不知道如何编写一个 UPDATE
查询,该查询将更新 result
列,使其包含子字符串出现的次数 name
包含。
原文由 Franck Dernoncourt 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个常见的解决方案是基于这个逻辑: 将搜索字符串替换为空字符串,并将新旧长度之间的差异除以搜索字符串的长度
因此: