postgresql – заменить все экземпляры строки в текстовом поле

В postgresql как заменить все экземпляры строки в столбце базы данных?

Скажем, я хочу, например, заменить все экземпляры cat dog .

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

Вы хотите использовать функцию замены postgresql:

 replace(string text, from text, to text) 

например :

 UPDATE  SET  = replace(, 'cat', 'dog')

Однако имейте в виду, что это будет замена строки в строку, поэтому «категория» станет «дочкой». функция regexp_replace может помочь вам определить более строгий шаблон соответствия для того, что вы хотите заменить.

Путь регулярного выражения

Если вам требуется более строгая замена, функция regexp_replace PostgreSQL может совпадать с шаблонами регулярных выражений POSIX. Он имеет синтаксис regexp_replace (источник, шаблон, замена [, flags]) .

Я буду использовать флаги i и g для нечувствительности к регистру и глобального соответствия, соответственно. Я также буду использовать \m и \M для соответствия началу и концу слова, соответственно.

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

 SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog'); --> Cat bobdog cat cats catfish SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i'); --> dog bobcat cat cats catfish SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g'); --> Cat bobdog dog dogs dogfish SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi'); --> dog bobdog dog dogs dogfish SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi'); --> dog bobcat dog dogs dogfish SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi'); --> dog bobdog dog cats catfish SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi'); --> dog bobcat dog cats catfish SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi'); --> dog bobcat dog dogs catfish 

Даже после всего этого существует хотя бы одно неразрешенное условие. Например, предложения, начинающиеся с «Cat», будут заменены нижним регистром «собака», которые разбивают капитализацию предложения.

Ознакомьтесь с текущими документами, соответствующими документу PostgreSQL , для всех деталей.

Обновить весь столбец с заменяющим текстом

Учитывая мои примеры, возможно, самым безопасным вариантом было бы:

 UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi'); 

Вы можете использовать функцию replace

 UPDATE your_table SET field = REPLACE(your_field, 'cat','dog') 

Определение функции выглядит следующим образом:

 replace(string text, from text, to text) 

и возвращает измененный текст. Вы также можете проверить этот скрипт sql .

Вот пример, который заменяет все экземпляры 1 или более символов пробела в столбце с подчеркиванием, используя регулярное выражение –

 select distinct on (pd) regexp_replace(rndc.pd, '\\s+', '_','g') as pd from rndc14_ndc_mstr rndc; 
  • Строка XSLT заменяет
  • BOOST_STATIC_ASSERT без повышения
  • Сопоставьте значения в кадре данных со значениями в другом кадре данных и замените прежний соответствующим шаблоном из другого кадра данных
  • Найти и заменить внутри текстового файла командой Bash
  • Как заменить буквенные подстроки без учета регистра в Java
  • Как искать и заменять текст в файле с помощью Python?
  • Как выполнить рекурсивный поиск / замену строки с помощью awk или sed?
  • Заменить последнюю часть строки
  • Есть ли альтернатива string.Replace, которая не чувствительна к регистру?
  • String.Replace () vs. StringBuilder.Replace ()
  • как заменить одиночную обратную косую черту в R
  • Давайте будем гением компьютера.