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

MySQL에서 문자열과 숫자가 혼합된 데이터에서 최대값 추출하기 (CAST 활용법)

MySQL에서 문자열+정수 혼합 데이터의 최대값 구하는 방법

"STU201"처럼 문자와 숫자가 함께 들어 있는 컬럼에서 최대값을 구하려면 CAST() 함수를 MAX() 함수와 함께 사용해야 합니다. 문자열 자체로는 올바른 숫자 비교가 불가능하기 때문에, 숫자 부분만 추출한 뒤 정수형으로 변환하는 과정이 필요합니다.

이때 SUBSTRING()으로 숫자 부분만 잘라내고, CAST()로 UNSIGNED(부호 없는 정수) 타입으로 변환한 후 MAX()를 적용하면 됩니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentBookCode varchar(200)
);
Query OK, 0 rows affected (0.56 sec)

2. 샘플 데이터 입력

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable(StudentBookCode) values('STU201');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentBookCode) values('STU202');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentBookCode) values('STU203');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentBookCode) values('STU290');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(StudentBookCode) values('STU234');
Query OK, 1 row affected (0.15 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable;

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

+----+-----------------+
| Id | StudentBookCode |
+----+-----------------+
| 1  | STU201          |
| 2  | STU202          |
| 3  | STU203          |
| 4  | STU290          |
| 5  | STU234          |
+----+-----------------+
5 rows in set (0.00 sec)

4. 최대값 조회 쿼리

이제 문자열에서 숫자 부분만 추출해 최대값을 구하는 쿼리를 실행합니다. "STU"는 앞 3글자이므로 SUBSTRING()으로 4번째 문자부터 잘라내면 숫자만 남게 됩니다.

mysql> select MAX(CAST(SUBSTRING(StudentBookCode FROM 4) AS UNSIGNED)) from DemoTable;

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

+----------------------------------------------------------+
| MAX(CAST(SUBSTRING(StudentBookCode FROM 4) AS UNSIGNED)) |
+----------------------------------------------------------+
| 290                                                      |
+----------------------------------------------------------+
1 row in set (0.00 sec)

핵심 포인트 정리

  • SUBSTRING(컬럼명 FROM 시작위치): 지정한 위치부터 문자열을 잘라냅니다. 위 예제에서는 'STU' 뒤의 숫자만 추출하기 위해 4번째 위치부터 지정했습니다.
  • CAST(... AS UNSIGNED): 추출된 문자열을 부호 없는 정수로 변환하여 숫자 비교가 가능하게 합니다.
  • MAX(): 변환된 숫자 값 중 가장 큰 값을 반환합니다.

이처럼 CAST()와 SUBSTRING()을 조합하면 문자열과 정수가 섞여 있는 데이터에서도 정확하게 최대값을 구할 수 있습니다. 참고로 MySQL 8.0 이상에서는 REGEXP_REPLACE()나 SPLIT_PART와 유사한 문자열 함수를 활용해 더 유연하게 숫자를 추출할 수도 있습니다.