MySQL에서 '5-9'처럼 하이픈(-)으로 구분된 숫자 문자열에 비교 연산자를 적용하려면 substring() 함수와 cast()를 함께 활용하면 됩니다. 이번 글에서는 예제 테이블을 생성하고, 문자열에서 숫자 부분만 추출해 조건 비교를 수행하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable1881
(
UserId int,
UserEducationGap varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
2. 데이터 삽입하기
insert 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1881 values(101,'5-9');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1881 values(102,'2-4');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1881 values(103,'4-8');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1881 values(104,'7-12');
Query OK, 1 row affected (0.00 sec)
3. 저장된 데이터 확인하기
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1881;
실행 결과는 다음과 같습니다.
+--------+------------------+
| UserId | UserEducationGap |
+--------+------------------+
| 101 | 5-9 |
| 102 | 2-4 |
| 103 | 4-8 |
| 104 | 7-12 |
+--------+------------------+
4 rows in set (0.00 sec)
4. 비교 연산자를 활용한 쿼리 작성
MySQL에서 숫자 문자열에 비교 연산자를 사용하려면 다음 절차를 따릅니다. 먼저 instr() 함수로 하이픈('-')의 위치를 찾고, substring()으로 그 앞까지의 숫자 부분만 추출한 뒤, cast(... as signed)를 통해 정수형으로 변환하면 일반적인 숫자 비교가 가능합니다.
mysql> select * from DemoTable1881 where
cast(substring(UserEducationGap, 1, instr(UserEducationGap, '-')-1) as signed) >= 4;
위 쿼리는 UserEducationGap 값에서 하이픈 앞의 숫자가 4 이상인 레코드만 필터링합니다. 실행 결과는 다음과 같습니다.
+--------+------------------+
| UserId | UserEducationGap |
+--------+------------------+
| 101 | 5-9 |
| 103 | 4-8 |
| 104 | 7-12 |
+--------+------------------+
3 rows in set (0.00 sec)
결과를 보면 하이픈 앞의 숫자가 4 미만인 '2-4'(UserId 102)만 제외되고 나머지 세 개의 레코드가 정상적으로 반환된 것을 확인할 수 있습니다. 이 방식은 범위 형태로 저장된 문자열 데이터를 조건 검색할 때 매우 유용하게 활용됩니다.