MySQL에서 하나의 셀에 여러 값이 쉼표(,)로 구분되어 저장되어 있을 때, 특정 국가 코드가 그 안에 포함되어 있는지 확인하려면 FIND_IN_SET() 함수를 사용하는 것이 가장 효과적입니다. 이 함수는 문자열 목록에서 찾고자 하는 값의 위치를 반환하며, 값이 존재하지 않으면 0을 반환합니다.
1. 샘플 테이블 생성하기
먼저 국가 코드를 저장할 테이블을 생성합니다.
mysql> create table DemoTable1439
-> (
-> CountryId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CountryCode varchar(20)
-> );
Query OK, 0 rows affected (0.49 sec)
2. 데이터 삽입하기
INSERT 문을 사용하여 쉼표로 구분된 국가 코드 값을 여러 개 삽입해 보겠습니다.
mysql> insert into DemoTable1439(CountryCode) values('1022_US,7894_UK');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1439(CountryCode) values('6567_AUS,7894_UK');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1439(CountryCode) values('6567_AUS');
Query OK, 1 row affected (0.09 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1439;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+------------------+
| CountryId | CountryCode |
+-----------+------------------+
| 1 | 1022_US,7894_UK |
| 2 | 6567_AUS,7894_UK |
| 3 | 6567_AUS |
+-----------+------------------+
3 rows in set (0.00 sec)
4. FIND_IN_SET()으로 특정 국가 코드 조회하기
이제 '6567_AUS'라는 국가 코드가 셀에 존재하는지 확인하는 쿼리입니다.
mysql> select * from DemoTable1439
-> where find_in_set('6567_AUS',CountryCode) > 0;
실행 결과는 다음과 같습니다.
+-----------+------------------+
| CountryId | CountryCode |
+-----------+------------------+
| 2 | 6567_AUS,7894_UK |
| 3 | 6567_AUS |
+-----------+------------------+
2 rows in set (0.00 sec)
FIND_IN_SET() 동작 원리
FIND_IN_SET(검색값, 대상문자열) 형태로 사용하며, 대상 문자열은 반드시 쉼표로 구분되어 있어야 합니다.
- 값이 발견되면 해당 값의 위치(1부터 시작)를 반환합니다.
- 값이 없으면 0을 반환하므로, WHERE 절에서
> 0조건으로 존재 여부를 판별할 수 있습니다.
참고로 단순 LIKE 연산자와 달리 FIND_IN_SET()은 부분 일치가 아닌 정확한 항목 단위 매칭을 수행하기 때문에, 예를 들어 '6567_AU'처럼 일부만 일치하는 값은 검색되지 않습니다. 따라서 쉼표로 구분된 목록에서 정확한 값 검색에 적합합니다.