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

MySQL FIND_IN_SET()으로 셀에 특정 국가 코드가 포함되어 있는지 확인하는 방법

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'처럼 일부만 일치하는 값은 검색되지 않습니다. 따라서 쉼표로 구분된 목록에서 정확한 값 검색에 적합합니다.