是否有可能用PostgreSQL中的varchar字段中的另一个字符(用unicode表示)替换给定字符(以unicode表示)的所有出现?在PostgreSQL中替换unicode字符
我想是这样的:
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
但它似乎真的写在该领域的字符串“\ u0060”,而不是对应于该代码的字符。
是否有可能用PostgreSQL中的varchar字段中的另一个字符(用unicode表示)替换给定字符(以unicode表示)的所有出现?在PostgreSQL中替换unicode字符
我想是这样的:
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
但它似乎真的写在该领域的字符串“\ u0060”,而不是对应于该代码的字符。
按照PostgreSQL documentation on lexical structure,你应该使用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()
or 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');
谢谢!有效 ;) – user1923631 2013-03-04 09:44:15