2013-07-31 81 views
0

比方说,我有一个表是这样的:模式匹配和更换

text_col 
--------------- 
apple, pear 
apple/orange, pear~pear|pear 
kiwi banana 
pear\kiwi 

我希望在此列更改所有pearwatermelon

所有我能想到的是select所有具有pear行,并updatepearwatermelon一个接一个。

有没有更好的/更清洁的方式来做到这一点?

我想创建一个plpgsql触发器函数来实现这一点。

+0

更清洁的方式?你能包括你的'更新'吗? – Parado

+0

@Parado我想我必须用'like','loop','replace'选择和'update'来选择所有包含'pear'的行。但@danihp有更干净的方式来做到这一点。 – Xin

回答

2

replace功能如何?

功能

替换(字符串文本,从文本到文本)

说明

从子以替换子字符串所有出现

样品

替换( 'abcdefabcdef', 'CD', 'XX')abXXefabXXef

为您的代码是一个简单的更新

Update table T set text_col = replace(text_col, 'pear', 'watermelon'); 

更新由于Igor Romanchenko建议:

Update table T 
set text_col = replace(text_col, 'pear', 'watermelon') 
where text_col like '%pear%'; 
+0

你的答案比我的简单得多。谢谢。 – Xin

+0

将更新查询仅限于行,实际上在文本中具有“pear”可能更有效。 –

+0

@IgorRomanchenko,完成!谢谢。 – danihp

0

选择从表名替换(text_col, '鸭梨', '西瓜')超过更新语句