我正在尝试在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
答案 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