MySQL에서 전체 이름(full name)에서 이니셜만 추출해 새로운 열에 저장하려면 left() 함수와 substring_index() 함수를 함께 사용하면 됩니다. 두 함수를 조합하면 이름과 성의 첫 글자를 손쉽게 가져올 수 있습니다.
1. 테이블 생성하기
먼저 실습에 사용할 데모 테이블을 생성합니다. 테이블에는 전체 이름을 저장할 full_name 열과 이니셜을 저장할 short_name 열이 포함됩니다.
mysql> create table demo13 −> ( −> full_name varchar(100), −> short_name varchar(20) −> ); Query OK, 0 rows affected (1.18 sec)
2. 데이터 삽입하기
insert 명령어를 사용해 테이블에 샘플 데이터를 추가합니다.
mysql> insert into demo13(full_name) values('John Smith');
Query OK, 1 row affected (0.27 sec)
mysql> insert into demo13(full_name) values('David Miller');
Query OK, 1 row affected (0.13 sec)
mysql> insert into demo13(full_name) values('Chris Brown');
Query OK, 1 row affected (0.28 sec)
3. 현재 데이터 확인하기
select 문으로 테이블에 저장된 레코드를 조회해 보겠습니다.
mysql> select *from demo13;
실행 결과는 다음과 같습니다. 아직 short_name 열에 값이 없으므로 NULL로 표시됩니다.
+--------------+------------+ | full_name | short_name | +--------------+------------+ | John Smith | NULL | | David Miller | NULL | | Chris Brown | NULL | +--------------+------------+ 3 rows in set (0.00 sec)
4. 이니셜로 업데이트하는 쿼리
다음은 테이블을 업데이트하여 각 이름의 이니셜을 추출하는 쿼리입니다.
mysql> update demo13 −> set short_name= concat( −> left(full_name, 1), −> left(substring_index(full_name, ' ', −1), 1) −> ); Query OK, 3 rows affected (0.14 sec) Rows matched: 3 Changed: 3 Warnings: 0
쿼리 동작 원리
left(full_name, 1): 전체 이름의 첫 번째 문자, 즉 이름(first name)의 첫 글자를 반환합니다.substring_index(full_name, ' ', -1): 공백을 구분자로 지정해 마지막 단어, 즉 성(last name)을 추출합니다.left(substring_index(...), 1): 추출한 성의 첫 글자를 반환합니다.concat(): 두 이니셜을 하나의 문자열로 연결합니다.
5. 최종 결과 확인하기
업데이트가 완료된 후 다시 select 문으로 데이터를 조회합니다.
mysql> select *from demo13;
각 이름의 이니셜이 short_name 열에 정상적으로 저장된 것을 확인할 수 있습니다.
+--------------+------------+ | full_name | short_name | +--------------+------------+ | John Smith | JS | | David Miller | DM | | Chris Brown | CB | +--------------+------------+ 3 rows in set (0.00 sec)
이처럼 left()와 substring_index()를 조합하면 별도의 애플리케이션 로직 없이 SQL문만으로 이름 이니셜을 간편하게 추출할 수 있습니다. 중간 이름(middle name)이 있거나 단어 수가 더 많은 경우에도 동일한 방식으로 응용할 수 있습니다.