Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 테이블을 업데이트하고 새 열에 이름 이니셜만 표시하는 방법

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)이 있거나 단어 수가 더 많은 경우에도 동일한 방식으로 응용할 수 있습니다.