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

MySQL에서 우편번호 필드의 -XXX 제거하기 — SUBSTRING_INDEX와 REGEXP 활용법

MySQL에서 우편번호 필드의 -XXX 제거하기

우편번호(ZipCode) 컬럼에 52533-909처럼 하이픈(-) 뒤에 붙은 숫자(-XXX)가 함께 저장되어 있고, 이 부분을 제거하고 싶다면 MySQL의 SUBSTRING_INDEX() 함수를 사용하는 것이 가장 간단한 방법입니다.

SUBSTRING_INDEX(문자열, 구분자, 개수)는 지정한 구분자를 기준으로 문자열을 나눈 후, 개수만큼의 앞부분(음수일 경우 뒷부분)을 반환합니다. 따라서 SUBSTRING_INDEX(ZipCode, '-', 1)을 적용하면 하이픈 앞쪽의 값만 남길 수 있습니다.

1. 테이블 생성

먼저 실습용 테이블을 생성합니다.

mysql> create table DemoTable
(
    ZipCode varchar(50)
);
Query OK, 0 rows affected (2.02 sec)

2. 샘플 데이터 삽입

insert 명령으로 우편번호 데이터를 입력합니다.

mysql> insert into DemoTable values('52533-909');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('12345-674');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('89893-890');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('AAAAA-783');
Query OK, 1 row affected (0.25 sec)

3. 현재 데이터 확인

select 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-----------+
| ZipCode   |
+-----------+
| 52533-909 |
| 12345-674 |
| 89893-890 |
| AAAAA-783 |
+-----------+
4 rows in set (0.00 sec)

4. UPDATE 쿼리로 -XXX 제거

아래 쿼리는 substring_index()를 이용해 우편번호에서 하이픈과 그 뒤의 숫자를 제거합니다.

mysql> update DemoTable set ZipCode=substring_index(ZipCode, '-', 1);
Query OK, 4 rows affected (0.44 sec)
Rows matched : 4  Changed : 4  Warnings : 0

5. 결과 확인

변경된 테이블을 다시 조회하면 하이픈 뒤 숫자가 모두 제거된 것을 확인할 수 있습니다.

mysql> select *from DemoTable;
+---------+
| ZipCode |
+---------+
| 52533   |
| 12345   |
| 89893   |
| AAAAA   |
+---------+
4 rows in set (0.00 sec)

참고: REGEXP_REPLACE를 사용하는 방법

MySQL 8.0 이상 버전에서는 정규식 함수인 REGEXP_REPLACE()를 사용해도 동일한 결과를 얻을 수 있습니다.

mysql> update DemoTable
    set ZipCode = regexp_replace(ZipCode, '-[0-9]+$', '');

이 쿼리는 문자열 끝에 위치한 '-숫자' 패턴을 찾아 빈 문자열로 치환합니다. 두 방법 중 상황에 맞는 것을 선택하면 되며, 단순히 첫 번째 구분자 앞의 값을 추출하는 경우에는 SUBSTRING_INDEX()가 더 직관적이고 성능 면에서도 유리합니다.