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

MySQL varchar 필드에서 정수 값 검색하기 – CASE 문 활용 방법

```html

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() 등의 함수를 활용해 명시적으로 처리하는 것이 좋습니다.