gpt4 book ai didi

sql - Postgresql:动态正则表达式模式

转载 作者:行者123 更新时间:2023-11-29 12:08:03 25 4
gpt4 key购买 nike

我有如下所示的事件数据:

 id | instance_id | value
1 | 1 | a
2 | 1 | ap
3 | 1 | app
4 | 1 | appl
5 | 2 | b
6 | 2 | bo
7 | 1 | apple
8 | 2 | boa
9 | 2 | boat
10 | 2 | boa
11 | 1 | appl
12 | 1 | apply

基本上,每一行都是用户键入一个新字母。他们还可以删除字母。

我想创建一个看起来像这样的数据集,我们称它为data

 id | instance_id | value
7 | 1 | apple
9 | 2 | boat
12 | 1 | apply

我的目标是在每个实例中提取所有完整的单词,同时考虑删除 - 因此仅获取最长的单词或最近输入的单词是不够的。

为此,我打算像这样进行正则表达式操作:

select * from data
where not exists (select * from data d2 where d2.value ~ (d.value || '.'))

实际上,我正在尝试构建一个动态正则表达式,它添加的匹配字符比现有字符多一个,并且特定于它所匹配的行。

上面的代码似乎不起作用。在 Python 中,我可以在使用之前“编译”一个正则表达式模式。 PostgreSQL 中动态构建模式的等效项是什么?

最佳答案

尝试简单的 LIKE 运算符而不是正则表达式模式:

SELECT * FROM data d1
WHERE NOT EXISTS (
SELECT * FROM data d2
WHERE d2.value LIKE d1.value ||'_%'
)

演示:https://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=cd064c92565639576ff456dbe0cd5f39

value 列上创建索引,这应该会稍微加快查询速度。

关于sql - Postgresql:动态正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51313395/

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