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

MySQL VARCHAR 필드에서 최대값 구하기 – MAX()와 SUBSTRING() 활용법

개요

MySQL에서 VARCHAR 타입으로 저장된 필드의 최대값을 구하려면 MAX() 함수와 SUBSTRING() 함수를 함께 사용해야 합니다. VARCHAR 필드는 문자열 기준으로 비교되기 때문에, 값이 숫자처럼 보여도 단순히 MAX()만 적용하면 의도한 결과가 나오지 않을 수 있습니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
    -> (
    -> Id varchar(200)
    -> );
Query OK, 0 rows affected (0.52 sec)

1단계: 테이블에 데이터 삽입

INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.

mysql> insert into DemoTable values('2019-0515-1980');
Query OK, 1 row affected (0.49 sec)

mysql> insert into DemoTable values('2019-0516-780');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('2019-0517-2780');
Query OK, 1 row affected (0.16 sec)

2단계: 저장된 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

출력 결과

+----------------+
| Id             |
+----------------+
| 2019-0515-1980 |
| 2019-0516-780  |
| 2019-0517-2780 |
+----------------+
3 rows in set (0.00 sec)

3단계: VARCHAR 필드에서 최대값 구하는 쿼리 실행

다음은 VARCHAR 필드에서 최대값을 구하는 쿼리입니다.

mysql> select max(Id) from DemoTable
    -> where Id LIKE  CONCAT(SUBSTRING(Id, 1, 4),'%');

출력 결과

+----------------+
| max(Id)        |
+----------------+
| 2019-0517-2780 |
+----------------+
1 row in set (0.00 sec)

쿼리 동작 원리

위 쿼리는 다음과 같은 단계로 동작합니다.

  • SUBSTRING(Id, 1, 4): 각 행의 Id 값에서 앞 4자리(예: '2019')를 추출합니다.
  • CONCAT(..., '%'): 추출한 접두사에 와일드카드 '%'를 붙여 LIKE 조건을 생성합니다.
  • WHERE 절: 동일한 접두사를 가진 레코드만 대상으로 조회 범위를 좁힙니다.
  • MAX(Id): 조건에 맞는 레코드 중 문자열 비교 기준으로 가장 큰 값을 반환합니다.

이 예제에서는 '2019'로 시작하는 세 개의 값 중 문자열 비교상 가장 큰 '2019-0517-2780'이 최대값으로 반환됩니다. 참고로, 하이픈 뒤의 숫자 부분을 실제 숫자 기준으로 비교하고 싶다면 CAST()나 SUBSTRING_INDEX() 등을 활용해 숫자 부분만 분리한 후 정렬하는 방법도 함께 고려해 볼 수 있습니다.