是否有可能取代给定字符(Unicode中表示)与PostgreSQL中varchar字段另一个字符(Unicode中表示)的所有出现?
我想是这样的:
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
但它似乎真的写在该领域的字符串“\ u0060”,而不是对应于该代码的字符。
是否有可能取代给定字符(Unicode中表示)与PostgreSQL中varchar字段另一个字符(Unicode中表示)的所有出现?
我想是这样的:
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
但它似乎真的写在该领域的字符串“\ u0060”,而不是对应于该代码的字符。
按照词法结构PostgreSQL文档 ,你应该使用U&
语法:
UPDATE mytable
SET myfield = regexp_replace(myfield, U&'\0050', U&'\0060', 'g')
您也可以使用PostgreSQL相关逃避字符串形式的E'\u0050'
。 比Unicode转义格式做这将工作在旧版本,但Unicode转义形式是优选的新版本。 这应该显示是怎么回事:
regress=> SELECT '\u0050', E'\u0050', U&'\0050';
?column? | ?column? | ?column?
----------+----------+----------
\u0050 | P | P
(1 row)
它应与“相对应的字符代码”的,除非在食品链来客户端或其他层轧液你的代码工作!
此外,使用translate()
或replace()
这个简单的工作。 比很多快regexp_replace()
translate()
也是很好的一次为多个简单的替代品。
并避免与空更新 WHERE
子句。 快得多着呢,避免表船和额外的VACUUM
成本。
UPDATE mytable
SET myfield = translate(myfield, 'P', '`') -- actual characters
WHERE myfield <> translate(myfield, 'P', '`');
如果你一直运行到的问题,使用的编码@mvp提供:
UPDATE mytable
SET myfield = translate(myfield, U&'\0050', U&'\0060')
WHERE myfield <> translate(myfield, U&'\0050', U&'\0060');