Postgres regexp_replace返回模式匹配失败

时间:2014-08-12 15:57:07

标签: sql database postgresql postgresql-9.3

我正在尝试在postgres中编写一个sql脚本。我有两列:列A和列B.两列都是字符串。列B表示附加到列A的前缀(如果B不为空)。示例:如果B列具有“PA”且要添加到A列的值为“102”,则A列现在将包含“PA102”。我想更新一个新的C列,其值为没有前缀的列A.

我试图使用以下内容:

regexp_replace(COLUMN_A, COLUMN_B, '')

regexp_replace(下面)的文档说:

“如果模式不匹配,则该函数不返回任何行。”

如果列B不匹配,我需要该方法从列A返回整个字符串。是否有其他方法(或者可能是regexp_replace的标志)可以实现此目的?

提前致谢。

regexp_replace docs:

http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

2 个答案:

答案 0 :(得分:1)

update  mytable set column_c = (select regexp_replace(column_a, column_b, '')  from mytable);

对我有用,关键是您将regexp_replace作为子查询,并将其用于更新。

答案 1 :(得分:0)

这样的事可能有用。它将在不匹配时返回null,然后您可以将其包装在coalesce()中以使用原始列填充它。

select (select regexp_replace(COLUMN_A, COLUMN_B, ''))

来自:http://www.postgresql.org/message-id/1421790037168-5834795.post@n5.nabble.com