Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换PostgreSQL中的unicode字符_Postgresql_Unicode_Replace_Sql Update - Fatal编程技术网

替换PostgreSQL中的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

在PostgreSQL的varchar字段中,是否可以将给定字符(以unicode表示)的所有匹配项替换为另一个字符(以unicode表示)

我试过这样的方法:

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');