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

MySQL에서 숫자 형태의 두 문자열 비교하는 방법

MySQL에서 두 문자열 비교하기

MySQL에서 숫자로 이루어진 두 문자열을 비교하려면 CAST 함수를 사용하여 문자열을 숫자 타입으로 변환한 후 비교하는 것이 좋습니다. 문자열 그대로 비교하면 사전식(lexicographic) 순서로 비교되어 의도와 다른 결과가 나올 수 있기 때문입니다.

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

mysql> create table compareTwoStringsDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Value varchar(100)
-> );
Query OK, 0 rows affected (0.52 sec)

다음으로 INSERT 명령을 사용하여 테이블에 샘플 데이터를 삽입합니다.

mysql> insert into compareTwoStringsDemo(Value) values('1235667');
Query OK, 1 row affected (0.66 sec)

mysql> insert into compareTwoStringsDemo(Value) values('999999');
Query OK, 1 row affected (0.11 sec)

mysql> insert into compareTwoStringsDemo(Value) values('999888');
Query OK, 1 row affected (0.17 sec)

mysql> insert into compareTwoStringsDemo(Value) values('567433');
mysql> insert into compareTwoStringsDemo(Value) values('567433');
Query OK, 1 row affected (0.23 sec)

mysql> insert into compareTwoStringsDemo(Value) values('2345123');
Query OK, 1 row affected (0.13 sec)

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

mysql> select *from compareTwoStringsDemo;

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

+----+---------+
| Id | Value |
+----+---------+
| 1 | 1235667 |
| 2 | 999999 |
| 3 | 999888 |
| 4 | 567433 |
| 5 | 2345123 |
+----+---------+
5 rows in set (0.00 sec)

CAST 함수로 문자열을 숫자로 변환하여 비교

이제 숫자 형태의 문자열을 실제 숫자 값과 비교하는 쿼리를 살펴보겠습니다. cast(Value as signed)를 사용하면 VARCHAR 타입의 값을 부호 있는 정수(signed integer)로 변환할 수 있습니다.

mysql> select *from compareTwoStringsDemo
-> where cast(Value as signed) = 999999;

쿼리를 실행하면 조건과 일치하는 레코드만 출력됩니다.

+----+--------+
| Id | Value |
+----+--------+
| 2 | 999999 |
+----+--------+
1 row in set (0.00 sec)

이처럼 CAST 함수를 활용하면 VARCHAR 컬럼에 저장된 숫자 형태의 문자열도 정확하게 수치 비교를 할 수 있습니다. 참고로 MySQL에서는 문자열과 숫자를 직접 비교할 경우 암묵적인 타입 변환이 일어나지만, 명시적으로 CAST를 사용하면 쿼리의 의도가 분명해지고 예측 가능한 결과를 얻을 수 있다는 장점이 있습니다.