gpt4 book ai didi

正则表达式在正则表达式引擎中工作但不在 postgresql 中工作

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

我尝试匹配管道分隔字符串中的数字 13,如下所示:

13 - match
1|2|13 - match
13|1|2 - match
1|13|2 - match

1345|1|2 - should fail
1|1345|2 - should fail
1|2|1345 - should fail
1|4513|2 - should fail
4513|1|2 - should fail
2|3|4|4513- should fail

因此,如果 13 仅出现在开头或结尾,或者整个单词的字符串之间,则它应该匹配。

为此,我编写了以下正则表达式:

^13$|(\|13\|)?(?(1)|(^13\||\|13$))

Regex101它按预期工作。请点击链接查看我的示例。


但在 Postgresql 中它会为以下查询抛出错误:

SELECT * FROM tbl_privilage WHERE user_id = 24 and show_id ~ '^13$|(\|13\|)?(?(1)|(^13\||\|13$))';

错误:

错误:正则表达式无效:量词操作数无效

SQL 状态:2201B

最佳答案

不要使用正则表达式,使用数组更健壮(也可能更高效):

select *
from the_table
where '13' = any (string_to_array(the_column, '|'));

这假设值和分隔符之间没有空格。您甚至可以为该表达式建立索引,这可能会加快搜索速度。

但我同意 Frank 的观点:你应该真正地修复你的数据模型。

关于正则表达式在正则表达式引擎中工作但不在 postgresql 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235576/

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