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

MySQL에서 varchar 필드에 저장된 숫자 비교하기 – CAST() 함수 활용법

MySQL에서 점수처럼 숫자 형태의 데이터를 varchar 타입 컬럼에 저장한 경우, 단순히 비교 연산자(>, <)만 사용하면 문자열 기준으로 비교되기 때문에 의도와 다른 결과가 나올 수 있습니다. 예를 들어 문자열 비교에서는 '100'이 '90'보다 작다고 판단됩니다. 이러한 문제를 해결하려면 CAST() 함수를 사용해 문자열을 숫자로 변환한 후 비교해야 합니다. 아래 예제를 통해 자세히 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentScore varchar(100)
    -> );
Query OK, 0 rows affected (0.66 sec)

2. 데이터 삽입

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

mysql> insert into DemoTable(StudentScore) values('90');
Query OK, 1 row affected (0.21 sec)

mysql> insert into DemoTable(StudentScore) values('100');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable(StudentScore) values('56');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(StudentScore) values('98');
Query OK, 1 row affected (0.13 sec)

3. 전체 데이터 조회

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

mysql> select *from DemoTable;

출력 결과

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|         1 | 90       |
|         2 | 100      |
|         3 | 56       |
|         4 | 98       |
+-----------+--------------+
4 rows in set (0.00 sec)

4. CAST()를 이용한 varchar 필드 비교

varchar로 저장된 점수를 숫자로 변환하여 91보다 큰 레코드를 조회하는 쿼리는 다음과 같습니다.

mysql> select *from DemoTable where  CAST(StudentScore AS SIGNED) > 91;

출력 결과

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|         2 | 100      |
|         4 | 98       |
+-----------+--------------+
2 rows in set (0.00 sec)

위 결과에서 볼 수 있듯이, CAST(StudentScore AS SIGNED)를 적용하면 문자열이 아닌 정수 값으로 비교되므로 91보다 큰 점수인 100과 98이 정확하게 조회됩니다. 만약 CAST 없이 StudentScore > '91'처럼 비교했다면 문자열 사전순 비교가 수행되어 잘못된 결과가 반환될 수 있으니 주의해야 합니다.