MySQL에서 우편번호(PostCode)처럼 공백으로 구분된 문자열에서 첫 번째 부분만 추출하고 싶다면 SUBSTRING() 함수와 LOCATE() 함수를 함께 사용하면 됩니다. LOCATE()로 공백 문자의 위치를 찾고, 그 앞까지의 문자열을 SUBSTRING()으로 잘라내는 방식입니다.
1. 테이블 생성하기
먼저 우편번호를 저장할 테이블을 생성합니다.
mysql> create table DemoTable858(PostCode varchar(100)); Query OK, 0 rows affected (0.56 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable858 values('US90 456');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable858 values('UK1 EN789343');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable858 values('ENG78884 736454654');
Query OK, 1 row affected (0.12 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable858;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------------+ | PostCode | +--------------------+ | US90 456 | | UK1 EN789343 | | ENG78884 736454654 | +--------------------+ 3 rows in set (0.00 sec)
4. 우편번호에서 첫 번째 부분 추출하기
공백을 기준으로 첫 번째 부분을 가져오는 쿼리는 다음과 같습니다.
mysql> select substring(PostCode, 1, locate (' ', PostCode) - 1) AS GetFirstPart from DemoTable858;실행 결과는 아래와 같습니다.
+--------------+ | GetFirstPart | +--------------+ | US90 | | UK1 | | ENG78884 | +--------------+ 3 rows in set (0.00 sec)
쿼리 동작 원리
LOCATE(' ', PostCode)는 각 우편번호 값에서 첫 번째 공백의 위치를 반환합니다. 여기서 1을 빼면 공백 바로 앞 문자까지의 길이가 되고, SUBSTRING(PostCode, 1, 해당 길이)는 문자열의 시작부터 그 위치까지를 잘라냅니다. 결과적으로 'US90 456'에서는 'US90', 'UK1 EN789343'에서는 'UK1'처럼 공백 앞부분만 깔끔하게 추출됩니다.
참고로 만약 공백이 포함되지 않은 값이 있다면 LOCATE()가 0을 반환해 잘못된 결과가 나올 수 있으므로, 필요하다면 NULLIF()나 CASE문을 활용해 예외 처리를 추가하는 것이 좋습니다.