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

MySQL VARCHAR 컬럼에서 특정 값보다 큰 값 조회하기 – CAST() 함수 활용법

MySQL에서 비교 대상 컬럼이 VARCHAR(문자열) 타입일 경우, 문자열 상태 그대로 비교하면 의도와 다른 결과가 나올 수 있습니다. 문자열은 숫자처럼 크기순으로 비교되지 않고 글자 단위로 비교되기 때문입니다. 따라서 CAST() 함수를 사용해 값을 숫자로 변환한 뒤 비교하는 것이 올바른 방법입니다. 예를 들어, VARCHAR 컬럼에서 999보다 큰 값을 조회하고 싶다면 CAST() 함수를 활용하면 됩니다.

테이블 생성하기

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

mysql> create table DemoTable
(
    Value varchar(100)
);
Query OK, 0 rows affected (1.02 sec)

데이터 삽입하기

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

mysql> insert into DemoTable values('900');
Query OK, 1 row affected (0.49 sec)
mysql> insert into DemoTable values('1090');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('860');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('12345');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable values('908345');
Query OK, 1 row affected (0.16 sec)

저장된 데이터 확인하기

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

mysql> select *from DemoTable;

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

+--------+
| Value  |
+--------+
| 900    |
| 1090   |
| 860    |
| 12345  |
| 908345 |
+--------+
5 rows in set (0.00 sec)

CAST() 함수로 특정 값보다 큰 값 조회하기

VARCHAR 컬럼에서 특정 값보다 큰 값을 구하려면 아래 쿼리처럼 CAST() 함수를 사용합니다.

mysql> select max(cast(Value AS SIGNED)) from DemoTable;

실행 결과:

+----------------------------+
| max(cast(Value AS SIGNED)) |
+----------------------------+
|                     908345 |
+----------------------------+
1 row in set (0.05 sec)

위 결과에서 확인할 수 있듯이, CAST(Value AS SIGNED)를 적용하면 문자열이 정수(SIGNED) 타입으로 변환되어 숫자 기준의 최댓값인 908345가 정확하게 반환됩니다. 만약 CAST() 없이 문자열 그대로 MAX()를 실행했다면 사전식(lexicographic) 비교가 이루어져 잘못된 결과가 나올 수 있으므로 주의해야 합니다.