替换PostgreSQL中的unicode字符
在PostgreSQL的varchar字段中,是否可以将给定字符(以unicode表示)的所有匹配项替换为另一个字符(以unicode表示) 我试过这样的方法:替换PostgreSQL中的unicode字符,postgresql,unicode,replace,sql-update,Postgresql,Unicode,Replace,Sql Update,在PostgreSQL的varchar字段中,是否可以将给定字符(以unicode表示)的所有匹配项替换为另一个字符(以unicode表示) 我试过这样的方法: UPDATE mytable SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g') 但它似乎真的在字段中写入字符串“\u0060”,而不是对应于该代码的字符。根据,您应该使用U&语法: UPDATE mytable SET myfield = regexp_r
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
但它似乎真的在字段中写入字符串“\u0060”,而不是对应于该代码的字符。根据,您应该使用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)
它应该与“对应于该代码的字符”一起工作,除非客户或食物链中的其他层破坏了您的代码
此外,用于此简单作业。比regexp\u replace()快得多。translate()
也适用于一次进行多个简单替换。并使用
WHERE
子句避免空更新。速度更快,并且避免了桌船和额外的真空成本
UPDATE mytable
SET myfield = translate(myfield, 'P', '`') -- actual characters
WHERE myfield <> translate(myfield, 'P', '`');
更新mytable
设置myfield=translate(myfield,'P','`')--实际字符
其中myfield translate(myfield,'P','`');
如果您一直遇到问题,请使用提供的编码:
UPDATE mytable
SET myfield = translate(myfield, U&'\0050', U&'\0060')
WHERE myfield <> translate(myfield, U&'\0050', U&'\0060');
更新mytable
设置myfield=translate(myfield,U&'\0050',U&'\0060')
其中myfield转换(myfield,U&'\0050',U&'\0060');