varchar 타입 컬럼에 쉼표로 구분된 숫자 값들이 저장되어 있을 때, 그 안에서 특정 정수를 포함하는 행을 찾아야 하는 경우가 있습니다. MySQL에서는 LIKE 연산자를 사용하면 간단하게 해결할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
테이블 생성하기
먼저 예제에 사용할 데모 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> DoubleValue varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
DoubleValue 컬럼은 varchar(20) 타입으로 선언되어 있으며, 쉼표로 구분된 실수 값들이 문자열 형태로 저장됩니다.
샘플 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(DoubleValue) values('80.2,90.5,88.90');
Query OK, 1 row affected (0.44 sec)
mysql> insert into DemoTable(DoubleValue) values('78.56,45.80,88,45.6');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(DoubleValue) values('12.34,90.06,89.90');
Query OK, 1 row affected (0.11 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+---------------------+
| Id | DoubleValue |
+----+---------------------+
| 1 | 80.2,90.5,88.90 |
| 2 | 78.56,45.80,88,45.6 |
| 3 | 12.34,90.06,89.90 |
+----+---------------------+
3 rows in set (0.00 sec)
LIKE 연산자로 정수 검색하기
이제 텍스트 데이터에서 특정 정수(여기서는 '80')가 포함된 행을 찾는 쿼리입니다.
mysql> select *from DemoTable where DoubleValue LIKE '%80%';
실행 결과는 다음과 같습니다.
+----+---------------------+
| Id | DoubleValue |
+----+---------------------+
| 1 | 80.2,90.5,88.90 |
| 2 | 78.56,45.80,88,45.6 |
+----+---------------------+
2 rows in set (0.00 sec)
결과 분석 및 주의 사항
와일드카드 %는 임의의 문자열을 의미하므로, 값 어디에든 '80'이라는 문자열이 포함되어 있으면 해당 행이 반환됩니다. 위 결과에서 첫 번째 행은 '80.2'에, 두 번째 행은 '45.80'에 '80'이 포함되어 있기 때문에 두 행 모두 검색되었습니다.
다만 LIKE 연산자는 단순 부분 문자열 매칭 방식이므로, '180'이나 '805'처럼 '80'이 일부로 포함된 다른 숫자도 함께 검색될 수 있다는 점에 유의해야 합니다. 보다 정밀한 매칭이 필요하다면 REGEXP나 FIND_IN_SET() 함수를 활용하는 방법도 고려해 볼 수 있습니다.