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 '_'
?
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 '_'
?
regexp_replace()
is powerful, versatile ... and slow.
If you can, use the plain (less powerful and versatile) replace()
, which is much faster.
For the simple case at hand (replace a list of single characters with another single character) use translate()
- even simpler and faster. And also much 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 this only replaces the space character (' '
) while the class shorthand \s
in a regular expression matches all whitespace characters of the the character class [[:space:]]
.
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')