Замените не-Unicode строку с Unicode в postgresql - PullRequest
0 голосов
/ 19 февраля 2020

Я импортировал набор данных в свою базу данных postgres. Он содержит несколько строк, в которых символы Юникода не были импортированы должным образом, и они отображаются как «u00e9», поэтому записи со словами «Café» выглядят как «Cafu00e9».

Теперь я хочу создать триггер, чтобы заменить 'u00e9' соответствующим символом Юникода. Это можно сделать так:

SELECT replace('Cafu00e9', 'u00e9', U&'\00e9');
---- Result ---
Café

Однако я не хочу перечислять все символы Юникода в большой цепочке replace вызовов. Поэтому я попытался использовать регулярное выражение:

SELECT regexp_replace('Cafu00e9', 'u(00[a-z0-9]{2})', U&'\\\1');

Это вызывает ошибку, хотя:

Query 1 ERROR: ERROR:  invalid Unicode escape value at or near "\1'"
LINE 1: ...CT regexp_replace('Cafu00e9', 'u(00[a-z0-9]{2})', U&'\\\1');

, что связано с U& до замены_строки. Это работает для получения строки, как мне нравится:

SELECT regexp_replace('Cafu00e9', 'u(00[a-z0-9]{2})', '\\\1');
----- Result ----
Caf\00e9

Но добавление U& вызывает вышеуказанную ошибку. Кажется, что Postgres оценивает U&'\\\1' без учета регулярных выражений вообще.

Каким будет хороший способ решить эту проблему без перечисления всех символов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...