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

MySQL에서 VARCHAR 컬럼의 최댓값 구하는 방법

MySQL VARCHAR 컬럼에서 최댓값 찾기

컬럼의 데이터 타입이 VARCHAR인 경우에는 단순히 MAX() 함수만 사용하면 문자열 기준으로 비교되어 잘못된 결과가 나올 수 있습니다. 따라서 최댓값을 정확하게 구하려면 MAX() 함수와 CAST() 함수를 함께 사용해야 합니다.

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

mysql> create table DemoTable2030
-> (
-> Value varchar(20)
-> );
Query OK, 0 rows affected (0.44 sec)

테이블에 데이터 삽입하기

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

mysql> insert into DemoTable2030 values('8');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable2030 values('1');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable2030 values('10001');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable2030 values('901');
Query OK, 1 row affected (0.22 sec)

저장된 레코드 확인하기

SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable2030

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------+
| Value |
+-------+
| 8 |
| 1 |
| 10001 |
| 901 |
+-------+
4 rows in set (0.00 sec)

VARCHAR 컬럼에서 최댓값 구하는 쿼리

다음은 VARCHAR 타입 컬럼에서 최댓값을 구하는 쿼리입니다. CAST() 함수로 값을 UNSIGNED(부호 없는 정수)로 변환한 후 MAX() 함수를 적용합니다.

mysql> select max(cast(Value as unsigned)) from DemoTable2030;

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

+------------------------------+
| max(cast(Value as unsigned)) |
+------------------------------+
| 10001 |
+------------------------------+
1 row in set (0.00 sec)

결과를 보면 최댓값으로 10001이 반환된 것을 확인할 수 있습니다. 만약 CAST() 없이 MAX(Value)만 사용했다면 문자열 비교 방식에 따라 '901'이 최댓값으로 잘못 반환될 수 있으므로 주의해야 합니다.