Замена регулярных выражений в PostgreSQL - PullRequest
4 голосов
/ 03 июня 2011

У меня есть таблица, в которой определенное строковое поле часто включает в себя юникод для одинарных и двойных кавычек: \u0027 и \u0022 соответственно.Вот и получается, мне на самом деле они нужны еще больше.Мне нужно поставить дополнительные \ перед ними.

Например, мне нужно изменить \u0027Hello, world\u0027 на \\u0027Hello, world\\u0027

Какой тип SQL может выполнить этот видобновить таблицу для всех записей?

Ответы [ 2 ]

10 голосов
/ 03 июня 2011

Если вам это действительно нужно, то вы можете использовать такие RE:

UPDATE table SET c = regexp_replace(c, '[^\\]\\(u\d{4})', '\\\\\1', 'g');

Убедитесь, что standard_conforming_strings включен, а для regex_flavor установлено значение advanced.

SHOW standard_conforming_strings;
 standard_conforming_strings 
-----------------------------
 on
(1 row)

Замена строки '\\\\\1' означает две следующие обратные косые черты \\ и \1 представляют первое (отчетное) заключенное в скобки подвыражение (то есть 'u', объединенное с четырьмя цифрами из шаблона).

1 голос
/ 03 июня 2011

Оператор UPDATE с SET yourcolumn = REPLACE(yourcolumn, '\u0027', '\\u0027') должен это сделать. Сначала попробуйте следующее, чтобы убедиться, что оно работает, перед массовым обновлением.

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