답변:
postgresql의 replace 함수 를 사용하고 싶습니다 :
replace(string text, from text, to text)
예를 들어 :
UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')
그러나 이것은 문자열을 문자열로 바꾸는 것이므로 '범주'는 '독점'이 될 것입니다. regexp_replace 함수는 대체하려는 항목에 대해보다 엄격한 일치 패턴을 정의하는 데 도움이 될 수 있습니다.
regexp_replace
보다 엄격한 대체 일치가 필요한 경우 PostgreSQL의 regexp_replace
함수는 POSIX 정규식 패턴을 사용하여 일치시킬 수 있습니다. regexp_replace (source, pattern, replacement [, 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"로 시작하는 문장은 문장 대문자를 깨뜨리는 소문자 "dog"으로 대체됩니다.
자세한 내용 은 현재 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 바이올린을 확인할 수도 있습니다 .
다음은 정규식을 사용하여 열에있는 하나 이상의 공백 문자의 모든 인스턴스를 밑줄로 바꾸는 예입니다.
select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;