gpt4 book ai didi

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

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

如何计算 PostgreSQL 中字符串中子字符串的出现次数?


例子:

我有一张 table

CREATE TABLE test."user"
(
uid integer NOT NULL,
name text,
result integer,
CONSTRAINT pkey PRIMARY KEY (uid)
)

我想编写一个查询,以便 result 包含 name 列包含的子字符串 o 出现次数的列。例如,如果在一行中,namehello world,则 result 列应该包含 2,因为那里是字符串hello world中的两个o

换句话说,我正在尝试编写一个将作为输入的查询:

enter image description here

并更新 result 列:

enter image description here


我知道函数 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 列,使其包含子字符串 o 的出现次数name 列包含。

最佳答案

一个常见的解决方案是基于这样的逻辑:将搜索字符串替换为空字符串,并将新旧长度之差除以搜索字符串的长度

(CHAR_LENGTH(name) - CHAR_LENGTH(REPLACE(name, 'substring', ''))) 
/ CHAR_LENGTH('substring')

因此:

UPDATE test."user"
SET result =
(CHAR_LENGTH(name) - CHAR_LENGTH(REPLACE(name, 'o', '')))
/ CHAR_LENGTH('o');

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

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