Як у postgresql замінити всі екземпляри рядка в стовпці бази даних?
Скажімо , я хочу , щоб замінити всі екземпляри cat
з dog
, наприклад.
Який найкращий спосіб зробити це?
Як у postgresql замінити всі екземпляри рядка в стовпці бази даних?
Скажімо , я хочу , щоб замінити всі екземпляри cat
з dog
, наприклад.
Який найкращий спосіб зробити це?
Відповіді:
Ви хочете використовувати функцію заміни postgresql :
replace(string text, from text, to text)
наприклад :
UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')
Однак майте на увазі, що це буде заміна рядка на рядок, тому "категорія" стане "догегорією". функція regexp_replace може допомогти вам визначити більш жорсткий шаблон відповідності для того, що ви хочете замінити.
regexp_replace
Якщо вам потрібна суворіша відповідність заміни, regexp_replace
функція PostgreSQL може збігатися з використанням регулярних виразів POSIX. Він має синтаксис regexp_replace (джерело, шаблон, заміна [, прапори]) .
Я буду використовувати прапори 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
Навіть після цього існує хоча б одна невирішена умова. Наприклад, речення, що починаються з "Кішка", будуть замінені на малі "собаки", які порушують велику літери речення.
Ознайомтеся з поточними документами, що відповідають шаблону 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;