Reputation: 13739
Is it possible to do a "find and replace" with the following?
UPDATE __table__ SET __column__ = replace(__column__, ' ', '_');
How do I define an array of strings to be found (','
, ';'
, ':'
, ' '
) to replace with '_'
?
Upvotes: 0
Views: 6570
Reputation: 656962
regexp_replace()
is powerful, versatile ... and slow.
Use the plain (less powerful and versatile) replace()
where possible, it's faster.
For the simple case at hand (replace each single character in a list with another single character) use translate()
- even simpler and faster. And also less error prone.
UPDATE tbl
SET col = translate(col, ',;: ', '____')
WHERE col <> translate(col, ',;: ', '____'); -- avoid empty updates
Only update rows that actually change. It's a common (possibly expensive) mistake to update all rows unconditionally. Details:
Note that ' '
only replaces the space character (' '
), while the class shorthand \s
in a regular expression matches all whitespace characters of the the character class [[:space:]]
.
Upvotes: 3
Reputation: 460
Read the section about Bracket Expressions which explains how to search for characters within a string to replace
but this should work for you
UPDATE __table__ SET __column__ = regexp_replace( __column__, E'[\\s,;:]','_','g')
Upvotes: 1