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

MySQL에서 하나의 필드 내 쉼표로 구분된 값 검색하기 – FIND_IN_SET 활용법

MySQL에서 하나의 필드에 여러 값이 구분자로 저장되어 있을 때, 특정 값이 포함되어 있는지 검색하려면 FIND_IN_SET 함수를 사용하면 됩니다. 이 함수는 쉼표로 구분된 문자열 목록에서 찾고자 하는 값의 위치를 반환하며, 해당 값이 없으면 0을 반환합니다.

테이블 생성하기

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
-> (
-> ListOfValues text
-> );
Query OK, 0 rows affected (0.56 sec)

레코드 삽입하기

insert 명령어를 사용하여 테이블에 레코드를 삽입합니다. 이 예제에서는 값들이 파이프(|) 기호로 구분되어 저장되어 있습니다.

mysql> insert into DemoTable values('10|20|30|40|50|60|100');
Query OK, 1 row affected (0.18 sec)

저장된 데이터 확인하기

select 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-----------------------+
| ListOfValues |
+-----------------------+
| 10|20|30|40|50|60|100 |
+-----------------------+
1 row in set (0.00 sec)

구분된 값 검색 쿼리

다음은 REPLACE 함수와 FIND_IN_SET 함수를 조합하여 하나의 필드 내에서 구분된 값 중 특정 값을 검색하는 쿼리입니다. 파이프(|)로 구분된 값을 먼저 쉼표(,)로 변환한 후 FIND_IN_SET으로 검색합니다.

mysql> select FIND_IN_SET(100, replace(ListOfValues,'|',',')) from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------------------------------------------------+
| FIND_IN_SET(100, replace(ListOfValues,'|',',')) |
+-------------------------------------------------+
| 7 |
+-------------------------------------------------+
1 row in set (0.04 sec)

결과 해석

결과값 7은 값 100이 목록에서 일곱 번째 위치에 있다는 의미입니다. 만약 검색하려는 값이 목록에 존재하지 않으면 FIND_IN_SET은 0을 반환합니다.

참고 사항

FIND_IN_SET 함수는 첫 번째 인수로 검색할 문자열을, 두 번째 인수로 쉼표로 구분된 문자열 목록을 받습니다. 따라서 데이터가 쉼표 외의 다른 구분자로 저장되어 있다면 위 예제처럼 REPLACE 함수를 함께 사용하여 먼저 쉼표 형식으로 변환해 주어야 정확한 검색이 가능합니다.