gpt4 book ai didi

regex - 替换正则表达式在 postgresql 中不起作用

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

我有一个包含字符串列的表格。在字符串中有单引号,我想去掉所有单引号。例如:

"''hey, hey, we're the monkees''"

我的正则表达式完美运行并选择所有包含单引号的值。

select regexp_replace(colName, '%''%', '') from tblName;

但是当我想用任何东西替换这个正则表达式时它不会更新我的表。

UPDATE tblName SET colName = regexp_replace(colName, '%''%', '');

这个我也查过

UPDATE tblName SET colName = replace(colName, '%''%', '');

最佳答案

Postgres 中的不同函数和运算符使用三种不同模式匹配语言中的一种,如 described in a dedicated section of the manual .

您在此处使用的 % 形式是 SQL LIKE 语法,其中 % 表示“任意数量的任意字符”。但是您正在使用的函数 regexp_replace 需要一个 Posix 正则表达式,其中等效项是 .*(. 表示任何字符,* 表示重复零次或多次)。

另请注意,LIKE 表达式必须匹配整个字符串,但 Posix 正则表达式不需要,除非您明确地将字符串的开头与 ^ 和以 $ 结尾。

所以 '%''%' 的直接翻译将是 '^.*''.*$',给你这个:

UPDATE tblName SET colName = regexp_replace(colName, '^.*''.*$', '');

在实践中,这会产生与更简单的相同的效果:

UPDATE tblName SET colname='' WHERE colname LIKE '%''%';

您的实际用例要简单得多:您想要替换所有出现的固定字符串 (',需要将其引用并转义为 '''') 与另一个固定字符串(空字符串,写成 '')。所以你根本不需要任何模式匹配,只需使用 replace 直接替换:

UPDATE tblName SET colname=replace(colname, '''', '');

如果您将它限制为包含撇号开头的行,这可能会更快:

UPDATE tblName SET colname=replace(colname, '''', '') WHERE colname LIKE '%''%';

关于regex - 替换正则表达式在 postgresql 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41959580/

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