PostgreSQL 문자열 바꾸기

Joy Idialu 2023년1월30일
  1. PostgreSQL의 replace() 함수를 사용하여 문자열 바꾸기
  2. PostgreSQL의 regexp_replace() 함수를 사용하여 문자열 바꾸기
  3. 추가 PostgreSQL replace() 함수 예제
PostgreSQL 문자열 바꾸기

이 튜토리얼에서는 PostgreSQL replace() 함수를 사용하여 문자열을 교체하는 방법에 대해 설명합니다.

PostgreSQL의 replace() 함수를 사용하여 문자열 바꾸기

PostgreSQL replace() 함수에는 모두 텍스트 유형인 다음 매개변수가 있습니다.

replace (string text, from text, to text)

string 매개변수는 replace() 함수가 수행되는 소스 텍스트입니다. from 매개변수는 string 인수의 하위 문자열이며 변경할 부분을 나타냅니다.

to 매개변수는 from 인수가 변경될 string 인수의 하위 문자열을 나타냅니다.

예를 들어, 다음과 같이 replace() 함수를 사용하여 Catfish 단어를 Turtle로 변경해 보겠습니다.

SELECT replace ('Catfish', 'Catfish', 'Turtle');

결과는 다음과 같습니다.

 replace
---------
 Turtle

다음과 같이 Catfish의 하위 문자열 CatJelly로 교체해 보겠습니다.

SELECT replace('Catfish', 'Cat', 'Jelly');

결과는 다음과 같습니다.

  replace
-----------
 Jellyfish

이 함수는 문자열의 특수 문자를 대체하는 데에도 사용할 수 있습니다. 예를 들어 다음과 같이 공백을 쉼표로 바꿉니다.

SELECT replace('A B C D E', ' ', ',');

결과는 다음과 같습니다.

  replace
-----------
 A,B,C,D,E

임의의 문자 텍스트가 있고 a 문자가 대문자인지 소문자인지에 관계없이 a 문자를 b로 교체하려고 한다고 가정해 보겠습니다. 다음과 같이 이 명령을 실행하면 다음과 같습니다.

SELECT replace('agAdavA', 'a', 'b');

결과는 다음과 같습니다.

 replace
---------
 bgAdbvA

위의 결과는 소문자 a만 교체되었으므로 대문자 a와 소문자 b의 모든 항목을 b로 교체해야 하는 요구 사항을 충족하지 않습니다. 따라서 PostgreSQL regexp_replace() 함수를 도입해야 합니다.

PostgreSQL의 regexp_replace() 함수를 사용하여 문자열 바꾸기

PostgreSQL regexp_replace() 함수에는 모두 텍스트 유형인 다음 매개변수가 있습니다.

regexp_replace (string text, pattern text, replacement text [,flags text])

string 인수는 대체 기능이 수행되는 소스 문자열입니다. pattern 매개변수는 문자열 인수의 하위 문자열을 바꾸기 전에 일치 항목이 있어야 하는 정규식을 나타냅니다.

replacement 매개변수는 문자열 인수의 하위 문자열을 변경할 텍스트를 나타냅니다. flags 매개변수는 regexp_replace() 함수의 동작을 변경하는 데 사용할 수 있는 텍스트를 나타냅니다.

a의 모든 대문자와 소문자를 b로 변경해야 하는 이전 예에서 다음과 같이 regexp_replace() 함수를 사용할 수 있습니다.

SELECT regexp_replace('agAdavA', '[a | A]+', 'b', 'g');

결과는 다음과 같습니다.

 regexp_replace
----------------
 bgbdbvb

정규식의 도입으로 대문자와 소문자 a의 모든 발생이 필요에 따라 대체되었습니다. g 플래그는 a의 첫 번째 항목뿐만 아니라 모든 항목이 대체되도록 합니다.

다음은 패턴 일치에 대한 PostgreSQL 문서입니다.

추가 PostgreSQL replace() 함수 예제

다음과 같이 단일 단어로 구성된 text라는 열이 있는 테이블이 있다고 가정해 보겠습니다.

id text
1 Red
2 Green
3 Blue
4 Red
5 Red

그리고 Red 단어의 모든 항목을 Yellow로 바꾸고 싶습니다. 다음과 같이 replace() 함수를 사용할 수 있습니다.

UPDATE demo SET text = replace(text, 'Red', 'Yellow');

결과는 다음과 같습니다.

 id |  text
----+--------
  1 | Yellow
  2 | Green
  3 | Blue
  4 | Yellow
  5 | Yellow

같은 테이블에 다음과 같이 텍스트 필드에 특수 문자가 포함된 단어가 있다고 가정해 보겠습니다.

id text
6 g-r-e-e-n
7 1-23–4
8 one-and-two
9 —n—2—
10 —–

그리고 모든 하이픈(-)을 밑줄(_)로 바꾸고 싶습니다. replace() 함수는 다음과 같이 이를 달성할 수 있습니다.

UPDATE demo SET text = replace(text, '-', '_');

결과는 다음과 같습니다.

 id |    text
----+-------------
  6 | g_r_e_e_n
  7 | 1_23__4
  8 | one_and_two
  9 | ___n___2___
 10 | _____

다음과 같이 text 필드에 단일 단어 대신 문장이 포함되도록 테이블에 더 많은 레코드를 삽입하는 경우:

id text
11 She bought a red bag
12 Green is a good color
13 The sky is blue
14 The color of the shirt is red
15 They plan to go with blue or red balloons

그리고 red라는 단어를 yellow로 바꾸고 싶습니다. 이것은 다음과 같이 replace() 함수를 사용하여 수행할 수 있습니다.

UPDATE demo SET text = replace(text, 'red', 'yellow');

결과는 다음과 같습니다.

 id |                     text
----+----------------------------------------------
 11 | She bought a yellow bag
 12 | Green is a good color
 13 | The sky is blue
 14 | The color of the shirt is yellow
 15 | They plan to go with blue or yellow balloons

따라하기 위해 실행할 명령은 다음과 같습니다.

--CREATE statement
CREATE TABLE demo (
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  text TEXT NOT NULL
);

--insert first set of records
INSERT INTO demo (text)
VALUES
  ('Red'),
  ('Green'),
  ('Blue'),
  ('Red'),
  ('Red');

--insert second set of records
INSERT INTO demo (text)
VALUES
  ('g-r-e-e-n'),
  ('1-23--4'),
  ('one-and-two'),
  ('---n---2---'),
  ('-----');

--insert third and final set of records
INSERT INTO demo (text)
VALUES
  ('She bought a red bag'),
  ('Green is a good color'),
  ('The sky is blue'),
  ('The color of the shirt is red'),
  ('They plan to go with blue or red balloons');

--update statements that include the REPLACE function
UPDATE demo SET text = replace(text, 'Red', 'Yellow');
UPDATE demo SET text = replace(text, '-', '_');
UPDATE demo SET text = replace(text, 'red', 'yellow');

--view all the changes
SELECT * FROM demo;

이 튜토리얼에서는 PostgreSQL replace()regexp_replace 함수를 사용하여 문자열을 교체하는 방법과 replace() 함수를 사용하여 테이블의 문자열을 업데이트하는 방법에 대해 논의했습니다.

관련 문장 - PostgreSQL String