MySQL에서 특정 컬럼(필드)의 값 중 공백 이후에 오는 모든 문자열을 제거하고 싶다면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 구분자를 기준으로 문자열을 잘라내어 원하는 부분만 손쉽게 추출할 수 있게 해줍니다.
SUBSTRING_INDEX() 기본 문법
SELECT SUBSTRING_INDEX(yourColumnName, ' ', 1) AS anyAliasName FROM yourTableName;
위 문법에서 세 번째 인자인 1은 공백을 기준으로 첫 번째 부분까지만 반환하라는 의미입니다. 즉, 공백 뒤의 모든 내용이 자동으로 제거됩니다.
예제 테이블 생성하기
실제 동작을 확인하기 위해 먼저 예제용 테이블을 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.
mysql> CREATE TABLE deleteAfterSpaceDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(100)
-> );
Query OK, 0 rows affected (0.55 sec)샘플 데이터 삽입하기
INSERT 명령을 사용해 학생 이름 데이터를 몇 개 추가합니다. 이름과 성이 공백으로 구분된 형태입니다.
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('John Smith');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('Adam Smith');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('Carol Taylor');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('Chris Brown');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('David Miller');
Query OK, 1 row affected (0.15 sec)저장된 전체 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> SELECT * FROM deleteAfterSpaceDemo;
실행 결과는 다음과 같습니다.
+----+--------------+ | Id | StudentName | +----+--------------+ | 1 | John Smith | | 2 | Adam Smith | | 3 | Carol Taylor | | 4 | Chris Brown | | 5 | David Miller | +----+--------------+ 5 rows in set (0.00 sec)
공백 뒤의 문자열 삭제 쿼리 실행하기
이제 SUBSTRING_INDEX()를 적용하여 공백 뒤의 모든 내용을 제거한 결과를 조회해 보겠습니다.
mysql> SELECT SUBSTRING_INDEX(StudentName, ' ', 1) AS deleteAllAfterSpace FROM deleteAfterSpaceDemo;
실행 결과는 다음과 같습니다.
+---------------------+ | deleteAllAfterSpace | +---------------------+ | John | | Adam | | Carol | | Chris | | David | +---------------------+ 5 rows in set (0.04 sec)
결과 정리
출력 결과를 보면 'John Smith'가 'John'으로, 'Carol Taylor'가 'Carol'로 변환된 것을 확인할 수 있습니다. 이처럼 SUBSTRING_INDEX(컬럼명, ' ', 1)을 사용하면 공백 앞쪽의 첫 번째 단어만 남기고 나머지는 모두 제거할 수 있습니다.
참고로 실제 테이블의 데이터를 영구적으로 변경하려면 UPDATE 문과 함께 사용하면 됩니다.
UPDATE yourTableName SET yourColumnName = SUBSTRING_INDEX(yourColumnName, ' ', 1);
또한 마지막 인자 값을 조절하면 원하는 위치까지의 문자열을 유연하게 추출할 수 있습니다. 예를 들어 -1을 넣으면 구분자 기준 마지막 부분을, 2를 넣으면 두 번째 구분자까지의 문자열을 반환합니다.