2012-06-12 2 views
3

У меня есть база данных, которая содержит около 10 тыс. Записей, а некоторые из них содержат символы HTML, которые я хотел бы заменить.Заменить все вхождения подстроки в текстовое поле базы данных

Например, я могу найти все вхождения:

SELECT * FROM TABLE 
WHERE TEXTFIELD LIKE '%&#47%' 

исходная строка Пример:

this is the cool mega string that contains &#47

как заменить все &#47 с /?

Конечный результат должен быть:

this is the cool mega string that contains /

+1

с использованием инструкции по обновлению. Если у вас уже есть рабочий, выберите его TSQL 101 для записи обновления. –

+0

@MitchWheat TSQL? Это база данных PostgreSQL. –

+0

SQL: Я думаю, вы знаете, что я имел в виду. –

ответ

12

Если вы хотите заменить определенную строку другой строкой или преобразование этой строки, вы можете использовать функцию «заменить» в PostgreSQL. Например, чтобы заменить все из «мест где кошка» с «собакой» в колонке «MyField», вы могли бы сделать:

UPDATE tablename 
SET myfield = replace(myfield,"cat", "dog") 

Вы можете добавить ИНЕКЕ или любой другой логики, как вы считаете нужным.

В качестве альтернативы, если вы пытаетесь преобразовать объекты HTML, символы ASCII или различные схемы кодирования, postgre также имеет функции для этого. Postgresql String Functions.

3

Ответ, данный @davesnitty, будет работать, но вам нужно очень тщательно подумать о том, может ли шаблон текста, который вы заменяете, встраивать в более длинный шаблон, который вы не хотите изменять. В противном случае вы найдете чей-то nooking a fire, и это просто странно.

Если возможно, используйте подходящий выделенный инструмент для того, что вы не ускользаете. Получил URLEncoded текст? используйте декодер url. Есть ли XML-объекты? Обработайте их, используя таблицу стилей XSLT в текстовом режиме. и т. д. Это, как правило, безопаснее для ваших данных, чем взломать его с помощью find-and-replace, так как поиск и замена часто имеют неудачные побочные эффекты, если не применять очень осторожно, как указано выше.

Возможно использование regular expression. you may want. Это not a universal solution to all problems, но они действительно удобны для некоторых рабочих мест.

Если вы хотите безоговорочно заменить все экземпляры « # 47» на «/», вам не нужно регулярное выражение.

Если вы хотите заменить «& # 47», но не «& # 471», возможно, потребуется регулярное выражение, потому что вы можете делать такие вещи, как матч только целые слова, соответствуют различным шаблонам, указывать мин/макс работает цифры и т. д.

В документации PostgreSQL string functions and operators вы найдете функцию regexp_replace, которая позволит вам применить регулярное выражение во время инструкции UPDATE.

Чтобы иметь возможность говорить гораздо больше, мне нужно знать, каковы ваши настоящие данные и что вы действительно пытаетесь сделать.

+3

любил ссылку «навести огонь»! –

Смежные вопросы