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

MySQL에서 VARCHAR로 저장된 숫자 문자열에서 최댓값을 표시하는 방법

MySQL에서 VARCHAR 컬럼의 숫자값으로 최댓값 구하기

MySQL에서 숫자 데이터가 VARCHAR(문자열) 타입으로 저장되어 있으면, 단순히 ORDER BY 절만 사용할 경우 값이 사전순(문자열 기준)으로 정렬되어 의도한 결과를 얻을 수 없습니다. 예를 들어 '1089.00'보다 '788.00'이 더 크다고 잘못 판단될 수 있습니다.

이 문제를 해결하려면 CAST() 함수를 사용해 varchar 값을 정수(SIGNED INTEGER)로 형 변환한 뒤 정렬해야 합니다. 아래에서 전체 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 ItemPrice 컬럼을 varchar 타입으로 갖는 테이블을 생성합니다.

mysql> create table DemoTable765 (ItemPrice varchar(200));
Query OK, 0 rows affected (0.52 sec)

2. 샘플 데이터 삽입

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

mysql> insert into DemoTable765 values('567.00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable765 values('1089.00');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable765 values('540.00');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable765 values('788.00');
Query OK, 1 row affected (0.39 sec)

3. 저장된 전체 데이터 확인

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

mysql> select *from DemoTable765;

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

+-----------+
| ItemPrice |
+-----------+
| 567.00 |
| 1089.00 |
| 540.00 |
| 788.00 |
+-----------+
4 rows in set (0.00 sec)

4. CAST()를 활용한 최댓값 조회

아래 쿼리는 CAST() 함수로 ItemPrice 컬럼을 SIGNED INTEGER로 변환한 후 내림차순(DESC) 정렬하여, 가장 큰 값이 맨 위에 표시되도록 합니다.

mysql> select *from DemoTable765 order by cast(ItemPrice AS SIGNED INTEGER) DESC;

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

+-----------+
| ItemPrice |
+-----------+
| 1089.00 |
| 788.00 |
| 567.00 |
| 540.00 |
+-----------+
4 rows in set, 4 warnings (0.00 sec)

'1089.00'이 가장 큰 값으로 정상적으로 맨 위에 표시되는 것을 확인할 수 있습니다.

추가 팁

소수점 유지: 소수점 이하 자릿수까지 비교해야 한다면 SIGNED INTEGER 대신 DECIMAL 타입으로 변환하는 것이 좋습니다. 정수로 변환하면 소수 부분이 잘려 경고(warnings)가 발생할 수 있습니다.

mysql> select *from DemoTable765 order by cast(ItemPrice AS DECIMAL(10,2)) DESC;

최댓값 하나만 가져오기: 집계 함수 MAX()와 함께 사용하면 가장 큰 값 한 건만 바로 조회할 수도 있습니다.

mysql> select max(cast(ItemPrice AS SIGNED)) as HighestPrice from DemoTable765;