데이터를 다루다 보면 문자열 값 전체가 아니라 일부만 추출해서 표시해야 하는 경우가 종종 있습니다. 이럴 때 유용하게 사용되는 문자열 함수가 바로 SUBSTR()입니다. 동일한 기능을 제공하는 SUBSTRING() 함수도 있으며, 이 글에서는 SQL에서 substring 함수를 활용하는 다양한 방법을 예제와 함께 살펴보겠습니다.
사전 준비
이 글에서 사용한 SQL Fiddle의 스키마는 다음과 같습니다.
create table names ( id INT, name VARCHAR(50), age INT, gender VARCHAR(50) ); insert into names (id, name, age, gender) values (1, 'Bret Starkings', 55, 'M'); insert into names (id, name, age, gender) values (2, 'Bobbye Eyckel', 76, 'F'); insert into names (id, name, age, gender) values (3, 'Barbie Veschi', 50, 'F'); insert into names (id, name, age, gender) values (4, 'Electra Blazewicz', 47, 'F');
SUBSTR() 함수를 사용하면 name 컬럼에서 원하는 부분만 가져올 수 있습니다. 함수의 기본 문법은 다음과 같습니다.
SUBSTR(column_name, position, num_letters);
이 함수는 세 가지 매개변수를 받습니다. 첫 번째는 부분 문자열을 추출할 대상 컬럼 또는 문자열, 두 번째는 1부터 시작하는 시작 위치(0이 아닌 1부터 인덱싱), 세 번째는 추출할 문자 수입니다. name 컬럼에 적용하면 SQL문은 다음과 같이 작성됩니다.
SELECT name, SUBSTR(name, 1, 4) AS NAME_SUBSTRING, age, gender FROM names;
실행 결과는 다음과 같습니다.
| name | NAME_SUBSTRING | age | gender |
| Bret Starkings | Bret | 55 | M |
| Bobbye Eyckel | Bobb | 76 | F |
| Barbie Veschi | Barb | 50 | F |
| Electra Blazewicz | Elec | 47 | F |
| Estrella Borleace | Estr | 57 | F |
세 번째 매개변수(추출할 문자 수)는 필요에 따라 생략할 수 있습니다. 생략하면 지정한 시작 위치부터 문자열 끝까지 전체가 반환됩니다.
SELECT name, SUBSTR(name, 4) AS NAME_SUBSTRING, age, gender FROM names;
| name | NAME_SUBSTRING | age | gender |
| Bret Starkings | t Starkings | 55 | M |
| Bobbye Eyckel | bye Eyckel | 76 | F |
| Barbie Veschi | bie Veschi | 50 | F |
| Electra Blazewicz | ctra Blazewicz | 47 | F |
| Estrella Borleace | rella Borleace | 57 | F |
부트캠프 참가자의 81%가 참여 후 IT 분야 취업 전망에 대한 자신감이 높아졌다고 답했습니다. 자신에게 맞는 부트캠프를 찾아 커리어 전환을 시작해 보세요.
부트캠프 수료생은 평균적으로 부트캠프를 시작하고 첫 직장을 찾기까지 6개월 미만의 짧은 기간 안에 커리어 전환을 완료했습니다.
또한 위치 값에 음수를 사용할 수도 있습니다. 음수를 지정하면 문자열 끝에서부터 역방향으로 계산하여, 해당 위치부터 문자열 끝까지의 내용을 반환합니다.
SELECT name, SUBSTR(name, -4) AS NAME_SUBSTRING, age, gender FROM names;
| name | NAME_SUBSTRING | age | gender |
| Bret Starkings | ings | 55 | M |
| Bobbye Eyckel | ckel | 76 | F |
| Barbie Veschi | schi | 50 | F |
| Electra Blazewicz | wicz | 47 | F |
| Estrella Borleace | eace | 57 | F |
다른 SQL 함수와 마찬가지로, 사용하는 데이터베이스 종류(MySQL, Oracle, PostgreSQL 등)에 따라 문법이 조금씩 다를 수 있습니다. 하지만 기본적인 개념은 모두 동일합니다. 위치 매개변수의 인덱스가 0이 아니라 1부터 시작한다는 점만 기억하면, 원하는 문자열을 손쉽게 추출하는 쿼리를 작성할 수 있습니다.