MySQL에서 특정 문자가 마지막으로 등장하는 위치를 기준으로 그 앞부분의 모든 내용을 추출하려면 REVERSE(), SUBSTRING(), INSTR() 함수를 조합하여 사용할 수 있습니다.
핵심 아이디어는 간단합니다. 문자열을 뒤집으면 원래 문자열에서 "마지막"으로 나타난 문자가 뒤집힌 문자열에서는 "첫 번째"로 나타납니다. 따라서 뒤집힌 문자열에서 해당 문자의 첫 번째 위치를 찾아 그 위치부터 끝까지 잘라낸 뒤, 다시 한번 뒤집으면 원하는 결과를 얻을 수 있습니다.
기본 문법
다음과 같은 문법을 사용합니다.
update yourTableName
set yourColumnName=REVERSE(SUBSTRING(REVERSE(yourColumnName),
INSTR(REVERSE(yourColumnName), '.')));
예제 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Words text
-> );
Query OK, 0 rows affected (0.51 sec)
데이터 삽입
insert 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable values('Value1. Value2 .Value3.Value4.Value5');
Query OK, 1 row affected (0.22 sec)레코드 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------------------------------+
| Words |
+--------------------------------------+
| Value1. Value2 .Value3.Value4.Value5 |
+--------------------------------------+
1 row in set (0.00 sec)
마지막 문자 기준으로 자르는 쿼리
다음은 MySQL에서 마지막으로 나타나는 문자('.') 앞의 모든 내용을 가져오는 쿼리입니다.
mysql> update DemoTable
-> set Words=REVERSE(SUBSTRING(REVERSE(Words), INSTR(REVERSE(Words),'.')));
Query OK, 1 row affected (0.13 sec)
Rows matched: 1 Changed: 1 Warnings: 0
결과 확인
업데이트 후 테이블의 레코드를 다시 한번 확인합니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------------------------+
| Words |
+--------------------------------+
| Value1. Value2 .Value3.Value4. |
+--------------------------------+
1 row in set (0.00 sec)
출력 결과를 보면 마지막 '.' 문자를 포함한 그 앞의 모든 내용만 남고, 마지막 '.' 뒤에 있던 'Value5' 부분은 제거된 것을 확인할 수 있습니다. 이처럼 REVERSE와 INSTR 함수를 조합하면 별도의 복잡한 로직 없이도 마지막 특정 문자를 기준으로 문자열을 손쉽게 처리할 수 있습니다.