sourcecode

postgresql - 텍스트 필드 내 문자열의 모든 인스턴스를 바꿉니다.

copyscript 2023. 7. 3. 23:07
반응형

postgresql - 텍스트 필드 내 문자열의 모든 인스턴스를 바꿉니다.

postgresql에서 데이터베이스 열의 문자열 인스턴스를 모두 바꾸려면 어떻게 해야 합니까?

의 모든 인스턴스를 바꾸고 싶다고 말합니다.cat와 함께dog,예를들면.

이것을 하는 가장 좋은 방법은 무엇입니까?

postgresql의 대체 함수를 사용하려고 합니다.

replace(string text, from text, to text)

예를 들어:

UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')

그러나 이것은 문자열 대 문자열로 대체되므로 'category'는 'dogregory'가 됩니다.regexp_replace 함수는 바꿀 항목에 대해 보다 엄격한 일치 패턴을 정의하는 데 도움이 될 수 있습니다.

정규 표현 방식

더 엄격한 대체 일치가 필요한 경우 PostgreSQL의regexp_replace함수는 POSIX 정규식 패턴을 사용하여 일치시킬 수 있습니다.regexp_replace 구문(source, pattern, replace [, flags ])을 사용합니다.

깃발을 사용하겠습니다.i그리고.g대/소문자를 구분하지 않고 글로벌 매칭을 수행합니다.나도 사용할 것입니다.\m그리고.\M단어의 시작과 끝을 각각 일치시킵니다.

정규식 교체를 수행할 때 일반적으로 꽤 많은 gotchas가 있습니다.고양이로 대체하는 것이 얼마나 쉬운지 알아보겠습니다.

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"로 대체될 것입니다.

현재 Postgre 체크아웃모든 세부 정보에 대한 SQL 패턴 일치 문서입니다.

전체 열을 대체 텍스트로 업데이트

예를 들어, 가장 안전한 방법은 다음과 같습니다.

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 fiddle도 확인할 수 있습니다.

다음은 정규식을 사용하여 열에 하나 이상의 공백 문자가 있는 모든 인스턴스를 밑줄로 바꾸는 예제입니다.

select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;

언급URL : https://stackoverflow.com/questions/5060526/postgresql-replace-all-instances-of-a-string-within-text-field

반응형