是否有可能用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