2014-12-29 267 views
0

是否可以使用以下命令進行「查找和替換」?查找多個字符串並用Postgres中的單個字符串替換

UPDATE __table__ SET __column__ = replace(__column__, ' ', '_'); 

如何定義字符串數組被發現(',',​​3210,':'' ')與'_'更換?

+2

使用'regexp_replace' –

+0

@CraigRinger例如沒有任何運氣,試着用'''{',',':',''}''嘗試,如果你想發表一個工作答案,我會很樂意接受它。 – John

+0

如果您的「字符串」實際上是單個字符,請不要使用'regexp_replace()',否則這會比所需的更昂貴和複雜。 –

回答

1

閱讀部分約Bracket Expressions這也解釋瞭如何搜索字符的字符串內更換

但是這應該爲你工作

UPDATE __table__ SET __column__ = regexp_replace(__column__, E'[\\s,;:]','_','g') 
+0

這工作,謝謝!我很驚訝他們沒有用'array'至少包含括號中的括號,儘管如果有人問這個問題,他們至少會發現這個Q/A。感謝您鏈接到文檔。表9-16包含了關於空間的詳細信息。 – John

2

regexp_replace()是強大的,多功能的......和緩慢的。

如果可以,請使用簡單(功能更強大,功能更強大)的replace(),速度要快得多。

對於手頭的簡單例子(用另一個單個字符替換單個字符的列表),使用translate() - 更簡單,更快。而且更不容易出錯。

UPDATE tbl 
SET col = translate(col, ',;: ', '____') 
WHERE col <> translate(col, ',;: ', '____'); -- avoid empty updates 

只更新實際更改的行。無條件地更新所有行是常見的(可能是昂貴的)錯誤。詳細信息:

注意,這只是取代了空格字符(' '),而類速記\s正則表達式匹配的字符類[[:space:]]的所有whitespace characters