MySQL에서 마지막 구분 기호를 기준으로 문자열의 왼쪽 부분 추출하기
MySQL에서 문자열의 마지막 구분 기호를 기준으로 왼쪽 부분만 추출하려면 LEFT() 함수를 사용하면 됩니다. 여기에 LOCATE()와 REVERSE() 함수를 함께 조합하면 원하는 결과를 손쉽게 얻을 수 있습니다.
핵심 아이디어는 다음과 같습니다. 먼저 REVERSE() 함수로 문자열을 뒤집은 뒤, LOCATE() 함수로 구분 기호('$')의 위치를 찾습니다. 이 위치는 원본 문자열에서 마지막 구분 기호가 나타나는 위치에 해당하며, 전체 문자열 길이에서 이 값을 빼면 추출해야 할 왼쪽 부분의 길이를 구할 수 있습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Title text
);
Query OK, 0 rows affected (0.52 sec)
2. 데이터 삽입
insert 명령어를 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable values('$/This$is[MySQL]$/MySQL[FirstClass]$MySQL[SecondClass]');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('$/This$is[Java]$/Java[FirstClass]$Java[SecondClass]');
Query OK, 1 row affected (0.10 sec)3. 데이터 조회
select 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------------------------------------------------------+
| Title |
+--------------------------------------------------------+
| $/This$is[MySQL]$/MySQL[FirstClass]$MySQL[SecondClass] |
| $/This$is[Java]$/Java[FirstClass]$Java[SecondClass] |
+--------------------------------------------------------+
2 rows in set (0.00 sec)
4. 마지막 구분 기호 기준으로 왼쪽 부분 추출
문자열의 마지막 '$'를 기준으로 왼쪽 부분을 가져오는 쿼리는 다음과 같습니다.
mysql> select left(Title, char_length(Title) - locate('$', reverse(Title))) as result from DemoTable;실행 결과는 다음과 같습니다.
+-------------------------------------+
| result |
+-------------------------------------+
| $/This$is[MySQL]$/MySQL[FirstClass] |
| $/This$is[Java]$/Java[FirstClass] |
+-------------------------------------+
2 rows in set (0.04 sec)
위 결과를 보면 각 문자열에서 마지막 '$' 이후의 부분([SecondClass])이 제거되고, 그 앞부분만 정확하게 추출된 것을 확인할 수 있습니다. 이 방식은 구분 기호가 몇 번이든 반복되어 나타나는 문자열에서도 항상 마지막 구분 기호를 기준으로 안정적으로 처리할 수 있다는 장점이 있습니다.