是否可以用PostgreSQL中varchar字段中的另一个字符(以unicode表示)替换给定字符的所有出现(以unicode表示)?
我试过这样的事情:
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
但它似乎确实在字段中写了字符串'\ u0060'而不是与该代码对应的字符。
答案 0 :(得分:12)
根据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)
答案 1 :(得分:5)
它应该与“代码对应的字符”一起使用,除非食物链中的客户端或其他层破坏了您的代码!
另外,使用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');