MySQL에서 문자열의 첫 번째 단어만 추출하고 싶다면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 나눈 뒤, 원하는 위치까지의 부분 문자열을 반환합니다.
SUBSTRING_INDEX() 기본 문법
SELECT SUBSTRING_INDEX(yourColumnName, ' ', 1) AS anyAliasName FROM yourTableName;
여기서 세 번째 인자인 1은 구분자(공백)를 기준으로 첫 번째 부분까지만 가져오라는 의미입니다. 즉, 공백 앞에 있는 첫 번째 단어가 결과로 반환됩니다.
예제 테이블 생성하기
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE DemoTable
(
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFullName VARCHAR(40)
);
Query OK, 0 rows affected (0.61 sec)데이터 삽입하기
INSERT 명령어를 사용해 학생 이름 데이터를 입력합니다.
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('John Smith');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('Carol Taylor');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('Bob Williams');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('David Miller');
Query OK, 1 row affected (0.16 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DemoTable;
실행 결과는 다음과 같습니다.
+-----------+-----------------+ | StudentId | StudentFullName | +-----------+-----------------+ | 1 | John Smith | | 2 | Carol Taylor | | 3 | Bob Williams | | 4 | David Miller | +-----------+-----------------+ 4 rows in set (0.00 sec)
첫 번째 단어 추출 쿼리 실행하기
이제 SUBSTRING_INDEX() 함수를 사용해 이름에서 첫 번째 단어(이름 부분)만 추출하는 쿼리를 실행해 보겠습니다.
mysql> SELECT SUBSTRING_INDEX(StudentFullName, ' ', 1) AS FirstWord FROM DemoTable;
실행 결과, 각 이름의 첫 번째 단어만 깔끔하게 출력되는 것을 확인할 수 있습니다.
+-----------+ | FirstWord | +-----------+ | John | | Carol | | Bob | | David | +-----------+ 4 rows in set (0.00 sec)
추가 팁: 마지막 단어 추출하기
반대로 성(Last Name)처럼 마지막 단어를 추출하고 싶다면 세 번째 인자를 -1로 지정하면 됩니다.
SELECT SUBSTRING_INDEX(StudentFullName, ' ', -1) AS LastWord FROM DemoTable;
이처럼 SUBSTRING_INDEX()는 구분자 기준으로 원하는 위치의 문자열을 손쉽게 잘라낼 수 있어, 이름 분리, 태그 파싱 등 다양한 상황에서 유용하게 활용할 수 있습니다.