MySQL에서 varchar(문자열) 필드에 저장된 데이터 중 정수 값과 일치하는 행을 찾고 싶다면, CASE 문을 활용하면 간단하게 해결할 수 있습니다.
아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 테스트용 테이블을 생성합니다. 여기서는 숫자가 포함된 이메일 주소 목록을 저장하는 테이블을 가정해 보겠습니다.
mysql> create table DemoTable
-> (
-> Title varchar(100)
-> );
Query OK, 0 rows affected (0.61 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('9John@example.com');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('3Carol@gmail.com');
Query OK, 1 row affected (0.45 sec)3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-------------------+
| Title |
+-------------------+
| 9John@example.com |
| 3Carol@gmail.com |
+-------------------+
2 rows in set (0.00 sec)
4. CASE 문으로 정수 값 검색하기
이제 varchar 필드에서 특정 정수 값(여기서는 9)을 검색하는 쿼리입니다. CASE 문을 사용하여 조건에 따라 결과 메시지를 다르게 출력합니다.
mysql> select (case when Title = 9 then 'Search Successful' else 'Search Unsuccessful' end)
AS Result from DemoTable;
출력 결과
+---------------------+
| Result |
+---------------------+
| Search Successful |
| Search Unsuccessful |
+---------------------+
2 rows in set, 2 warnings (0.00 sec)
참고 사항
실행 결과에 2개의 경고(warnings)가 표시된 것을 확인할 수 있습니다. 이는 문자열 타입인 Title 컬럼과 정수 값 9를 비교하는 과정에서 MySQL이 암시적 형변환(implicit type conversion)을 수행하기 때문입니다.
즉, MySQL은 비교를 위해 각 문자열을 숫자로 변환하며, 문자열 시작 부분의 숫자만 인식합니다. 그래서 '9John@example.com'은 9로 변환되어 일치하지만, '3Carol@gmail.com'은 3으로 변환되어 조건에 맞지 않는 것입니다.
실무에서는 이러한 암시적 형변환이 성능 저하나 예기치 않은 결과를 초래할 수 있으므로, 가능하다면 데이터 타입을 일관되게 설계하거나 CAST(), SUBSTRING() 등의 함수를 활용해 명시적으로 처리하는 것이 좋습니다.