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

MySQL에서 문자열 내 마지막 부분 문자열의 위치(인덱스) 구하는 방법

MySQL에서 주어진 문자열 안에서 마지막 부분 문자열(substring)의 위치를 찾으려면 CHAR_LENGTH() 함수와 LOCATE() 함수를 함께 활용하면 됩니다.

핵심 원리는 간단합니다. 먼저 전체 문자열의 길이를 구한 뒤, 문자열을 뒤집어(REVERSE) 구분자가 처음 나타나는 위치를 찾으면 그 차이가 곧 마지막 부분 문자열의 시작 인덱스가 됩니다.

기본 문법

사용하는 문법은 다음과 같습니다.

SELECT CHAR_LENGTH(yourColumnName) - LOCATE('yourDelimiter', REVERSE(yourColumnName)) + 1 AS anyVariableName
FROM yourTableName;

위 문법을 단계별로 살펴보면 다음과 같습니다.

  • CHAR_LENGTH(): 전체 문자열의 길이를 반환합니다.
  • REVERSE(): 문자열을 거꾸로 뒤집습니다.
  • LOCATE(): 뒤집힌 문자열에서 구분자가 처음 등장하는 위치를 찾습니다. 이는 원본 문자열 기준으로는 마지막 등장 위치에 해당합니다.

예제 테이블 생성하기

문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> CREATE TABLE SubStringIndexDemo
    -> (
    -> Words VARCHAR(200)
    -> );
Query OK, 0 rows affected (0.57 sec)

이제 INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> INSERT INTO SubStringIndexDemo VALUES('This is MySQL Query');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO SubStringIndexDemo VALUES('MySQL is a Relational Database');
Query OK, 1 row affected (0.34 sec)

mysql> INSERT INTO SubStringIndexDemo VALUES('Java is a programming language');
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO SubStringIndexDemo VALUES('Spring is a Framework');
Query OK, 1 row affected (0.20 sec)

SELECT 명령으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM SubStringIndexDemo;

출력 결과

+--------------------------------+
| Words                          |
+--------------------------------+
| This is MySQL Query            |
| MySQL is a Relational Database |
| Java is a programming language |
| Spring is a Framework          |
+--------------------------------+
4 rows in set (0.00 sec)

마지막 부분 문자열의 인덱스 구하기

다음은 공백을 구분자로 사용하여 각 문자열에서 마지막 부분 문자열(마지막 단어)의 시작 위치를 구하는 쿼리입니다.

mysql> SELECT CHAR_LENGTH(Words) - LOCATE(' ', REVERSE(Words)) + 1 AS PositionOfLastSubstring
    -> FROM SubStringIndexDemo;

출력 결과

+-------------------------+
| PositionOfLastSubstring |
+-------------------------+
|                      14 |
|                      22 |
|                      22 |
|                      12 |
+-------------------------+
4 rows in set (0.00 sec)

결과 해석

출력 결과를 살펴보면 다음과 같습니다.

  • 'This is MySQL Query' → 마지막 단어 'Query'는 14번째 위치에서 시작합니다.
  • 'MySQL is a Relational Database' → 마지막 단어 'Database'는 22번째 위치에서 시작합니다.
  • 'Java is a programming language' → 마지막 단어 'language'는 22번째 위치에서 시작합니다.
  • 'Spring is a Framework' → 마지막 단어 'Framework'는 12번째 위치에서 시작합니다.

이처럼 CHAR_LENGTH(), REVERSE(), LOCATE() 세 함수를 조합하면 별도의 복잡한 로직 없이도 문자열에서 마지막 부분 문자열의 정확한 위치를 손쉽게 구할 수 있습니다. 이 방법은 파일 확장자 추출, 로그 파싱 등 마지막 구분자 이후의 값을 다뤄야 하는 다양한 상황에서 유용하게 활용됩니다.