PostgreSQL에서 연속된 공백을 단일 공백으로 변환하는 방법
잡학다식의 지식공방

빅데이터 관련 자료

PostgreSQL에서 연속된 공백을 단일 공백으로 변환하는 방법

carpe08 2025. 3. 6. 14:19
320x100

SQL에서 문자열을 다룰 때, 데이터 입력 과정에서 여러 개의 공백이 포함될 수 있습니다. 예를 들어, 사용자 입력값이나 로그 데이터에서 의도치 않게 연속된 공백이 들어가는 경우가 있습니다.

PostgreSQL에서는 이러한 연속된 공백을 단일 공백으로 변환하는 데 REGEXP_REPLACE 함수를 사용할 수 있습니다.

1. REGEXP_REPLACE 함수란?

REGEXP_REPLACE는 정규식을 이용하여 문자열을 변환하는 PostgreSQL의 강력한 문자열 처리 함수입니다. 기본적인 사용법은 다음과 같습니다:

REGEXP_REPLACE(source_string, pattern, replacement, flags)
  • source_string: 변환할 문자열
  • pattern: 정규식 패턴 (치환 대상)
  • replacement: 변환할 문자열
  • flags: 변환 방식 지정 (예: g는 전체 일치 항목을 변경)

2. 연속된 공백을 단일 공백으로 변환하기

연속된 공백을 하나의 공백으로 변환하려면 다음과 같은 쿼리를 사용할 수 있습니다.

SELECT REGEXP_REPLACE('Hello    World   !', '\s+', ' ', 'g');

🔍 정규식 패턴 \s+ 설명

  • \s → 공백 문자(space), 탭(\t), 줄바꿈(\n, \r) 등 모든 공백을 의미
  • + → 하나 이상 연속된 문자를 의미 (즉, 2개 이상의 공백도 포함)
  • ' ' → 변환할 값 (단일 공백)
  • 'g'global 플래그로, 모든 일치 항목을 변환 (없으면 첫 번째 일치 항목만 변경됨)

🏆 실행 결과

Hello World !

즉, 연속된 공백이 하나의 공백으로 변환되었습니다.

3. 실전 예제: 공백이 포함된 데이터 정리

아래와 같은 테이블이 있다고 가정해 보겠습니다.

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT
);

INSERT INTO users (name) VALUES ('John   Doe'), ('  Alice    Smith  ');

사용자 데이터에서 불필요한 공백을 정리하고 싶다면, 다음과 같이 UPDATE 문을 사용할 수 있습니다.

UPDATE users
SET name = REGEXP_REPLACE(name, '\s+', ' ', 'g');

이렇게 하면 name 컬럼의 값에서 모든 연속된 공백이 단일 공백으로 변환됩니다.

🏆 변환 결과

ID원래 값변환 후

1 John Doe John Doe
2 Alice Smith Alice Smith

4. 추가 활용: 앞뒤 공백까지 제거하기

연속된 공백을 단일 공백으로 변환하는 것뿐만 아니라, 앞뒤 공백까지 제거하려면 TRIM() 함수를 함께 사용하면 됩니다.

SELECT TRIM(REGEXP_REPLACE('  PostgreSQL    is   awesome!  ', '\s+', ' ', 'g'));

🏆 실행 결과

PostgreSQL is awesome!

즉, 문장 내의 공백을 정리하면서 앞뒤 공백도 제거할 수 있습니다.

5. 마무리

  • PostgreSQL에서 REGEXP_REPLACE를 사용하면 연속된 공백을 단일 공백으로 변환할 수 있습니다.
  • \s+ 정규식을 활용하면 공백, 탭, 줄바꿈까지 한 번에 정리할 수 있습니다.
  • 데이터 정리 과정에서 TRIM()을 함께 사용하면 앞뒤 공백까지 제거할 수 있어 더욱 깔끔한 결과를 얻을 수 있습니다.
320x100
320x100