[SQL] 문자 데이터 가공 - REPLACE, SUBSTRING, CONCAT

2024. 8. 16. 20:21Language/SQL

 데이터 가공이라 해서 기존의 문자 데이터를 변경하는 의미가 아니다. 출력 결과를 내가 원하는 형태로 수정하는 느낌에 가깝다. 예를 들어 현재 내가 필요한 문자 데이터가 어떠한 형식을 요구 받는다면 해당 형식에 맞게 기존 문자 데이터를 가공한 결과를 출력 하는 것이다. 가공에는 특정 문자를 변경 또는 남길 수 있고, 문자를 합칠 수도 있다.

 

1. 기본 문법

SELECT 원본 컬럼명,	// 해당 컬럼은 가공 컬럼과 비교하기 위해 사용됨
       REPLACE(대상 컬럼명, 현재문자, 바꿀문자) 별명,
       SUBSTRING(대상 컬럼명, 시작인덱스, 글자 수) 별명,
       CONCAT(붙일 문자1, 붙일 문자2, ..., 붙일 문자n) 별명
FROM 테이블명
  • REPLACE : 대상 컬럼에 있는 문자 데이터 중 바꿔야 하는 문자(현재문자)를 포함한 데이터만 해당 문자를 지정한 문자(바꿀문자)로 변경한다.
  • SUBSTRING : 대상 컬럼에 있는 문자 데이터에서 문자의 일부를 출력한다(다르게 말하면 지정한 문자만을 남긴다). 시작 위치와 글자 수를 설정하면 시작 위치에서 지정한 글자 수 만큼의 부분 문자를 출력하는 방식이다. 여기서 글자 위치는 '1' 부터 시작이며 글자 수를 지정하지 않으면 시작부터 끝까지 부분 문자를 남긴다. 또한 'SUBSTR' 으로 줄여 사용할 수 있다.
  • CONCAT : 문자를 합쳐 하나의 문자 결과를 출력한다. ' , ' 를 사용해 여러 문자를 지정할 수 있으며, 합쳐질 땐 공백 없이 합쳐진다.

 

2. 사용 예시

2-1. REPLACE

 'food_orders' 테이블의 'addr' 컬럼에서 "서울" 이라는 문자를 포함하고, "서울특별시" 를 "서울시" 로 변경한 결과를 출력해보자.

SELECT addr '주소', REPLACE(addr, '서울특별시', '서울시') '변경주소'
FROM food_orders
WHERE addr LIKE '%서울%'

문자 데이터 변경 결과 출력

 

제대로 주소가 변경됬는지 확인을 위해 원본 주소와 변경 주소 두 컬럼을 출력해보았다. "서울특별시" 라는 문자가  "서울시" 로 변경된 것을 확인 할 수 있다. 데이터의 모든 부분이 아닌 지정한 일부를 변경하며. 전체 문자를 변경하고 싶다면 문자 데이터 전체를 지정하면 된다.

 

2-2. SUBSTRING

 'customers' 테이블에서 고객들이 갖는 성씨의 종류를 출력해보자.

SELECT DISTINCT SUBSTRING(name, 1, 1) family_name
FROM customers

문자 데이터 일부 조회

 

고객들이 갖는 성씨를 파악하기 위해 'name' 의 첫 글자(위치 1 부터 1 글자)만 남기고, 'DISTINCT' 를 사용해 중복을 제거해 원하는 결과를 출력할 수 있었다.

 

2-3. CONCAT

 'customers' 테이블에서 고객의 이름과 이메일 주소를 합쳐 하나의 컬럼으로 조회해보자.

SELECT name, email, CONCAT(name, ' / ', email) '이름 / 이메일'
FROM customers

합친 문자 결과 조회