use*_*631 6 postgresql unicode replace sql-update
是否有可能在PostgreSQL的varchar字段中用另一个字符(以unicode表示)替换给定字符的所有出现(以unicode表示)?
我试过这样的事情:
UPDATE mytable
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')
Run Code Online (Sandbox Code Playgroud)
但它似乎确实在字段中写了字符串'\ u0060'而不是与该代码对应的字符.
mvp*_*mvp 12
根据关于词法结构的PostgreSQL文档,你应该使用U&语法:
UPDATE mytable
SET myfield = regexp_replace(myfield, U&'\0050', U&'\0060', 'g')
Run Code Online (Sandbox Code Playgroud)
您还可以使用PostgreSQL特定的转义字符串形式E'\u0050'.这将适用于比unicode转义表单更旧的版本,但对于较新的版本,首选unicode转义表单.这应该显示正在发生的事情:
regress=> SELECT '\u0050', E'\u0050', U&'\0050';
?column? | ?column? | ?column?
----------+----------+----------
\u0050 | P | P
(1 row)
Run Code Online (Sandbox Code Playgroud)
除非来客户或食物链中的其他层来破坏您的代码,否则它应与“与该代码对应的字符”一起使用!
另外,使用translate()或replace()进行此简单的工作。比快得多regexp_replace()。translate()一次也可用于多个简单替换。
并避免使用子句进行空更新WHERE。速度更快,并且避免了餐桌船和其他VACUUM费用。
UPDATE mytable
SET myfield = translate(myfield, 'P', '`') -- actual characters
WHERE myfield <> translate(myfield, 'P', '`');
Run Code Online (Sandbox Code Playgroud)
如果仍然遇到问题,请使用提供的@mvp编码:
UPDATE mytable
SET myfield = translate(myfield, U&'\0050', U&'\0060')
WHERE myfield <> translate(myfield, U&'\0050', U&'\0060');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11120 次 |
| 最近记录: |