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

MySQL에서 ORDER BY와 RIGHT() 함수로 텍스트 열의 최대값 조회하는 방법

텍스트(TEXT) 타입으로 저장된 데이터 중에서 숫자 부분이 가장 큰 값을 찾아야 할 때가 있습니다. 이런 경우 ORDER BY 절과 함께 RIGHT() 함수를 활용하면 손쉽게 해결할 수 있습니다. 지금부터 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 StudentCode라는 TEXT 타입 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable1487
    -> (
    -> StudentCode text
    -> );
Query OK, 0 rows affected (0.91 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용해 여러 개의 레코드를 입력합니다. 숫자만 있는 값과 문자가 포함된 값이 섞여 있음에 주목하세요.

mysql> insert into DemoTable1487 values('560');
Query OK, 1 row affected (0.36 sec)
mysql> insert into DemoTable1487 values('789');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1487 values('STUDENT78');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1487 values('John89');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1487 values('Carol101');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1487 values('STUDENT98');
Query OK, 1 row affected (0.13 sec)

3. 전체 데이터 확인하기

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

mysql> select * from DemoTable1487;

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

+-------------+
| StudentCode |
+-------------+
| 560         |
| 789         |
| STUDENT78   |
| John89      |
| Carol101    |
| STUDENT98   |
+-------------+
6 rows in set (0.00 sec)

4. 최대 텍스트 값 조회 쿼리 작성하기

이제 'STUDENT'로 시작하는 코드 중 숫자 부분이 가장 큰 레코드를 조회하는 쿼리입니다. 핵심은 다음과 같습니다.

  • LIKE 'STUDENT%' : 'STUDENT'로 시작하는 레코드만 필터링합니다.
  • RIGHT(StudentCode, LENGTH(StudentCode) - LENGTH('STUDENT')) : 접두사 'STUDENT'를 제외한 나머지 숫자 부분만 추출합니다.
  • CAST(... AS UNSIGNED) : 추출된 문자열을 정수로 변환하여 올바른 숫자 비교가 가능하게 합니다.
  • ORDER BY ... DESC LIMIT 1 : 내림차순 정렬 후 첫 번째 행, 즉 최대값 하나만 반환합니다.
mysql> select * from DemoTable1487 where StudentCode LIKE 'STUDENT%'
    -> order by cast(right(StudentCode,length(StudentCode)-length('STUDENT')) as UNSIGNED) desc
    -> limit 1;

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

+-------------+
| StudentCode |
+-------------+
| STUDENT98   |
+-------------+
1 row in set (0.04 sec)

정리

TEXT 타입 컬럼은 문자열 기준으로 정렬되기 때문에 단순히 ORDER BY를 사용하면 'STUDENT9'가 'STUDENT10'보다 크다고 잘못 판단될 수 있습니다. 따라서 RIGHT() 함수로 숫자 부분을 분리하고 CAST()로 정수형으로 변환한 뒤 정렬하는 것이 정확한 결과를 얻는 핵심 포인트입니다. 이 방식은 학번, 주문번호처럼 접두사 + 일련번호 형태의 데이터에서 최신 또는 최대 번호를 찾을 때 유용하게 활용할 수 있습니다.