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

MySQL에서 FIND_IN_SET() 함수로 특정 행을 선택하는 방법

MySQL에서 특정 행 선택하기

MySQL에서 쉼표로 구분된 값 목록이 저장된 컬럼에서 특정 행을 선택하려면 FIND_IN_SET() 함수를 사용하면 됩니다. 이 함수는 값 목록 안에 검색하고자 하는 값이 존재하는지 확인하여, 존재하면 그 위치를 반환하고 존재하지 않으면 0을 반환합니다.

먼저 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
   (
   ListOfValues varchar(200)
   );
Query OK, 0 rows affected (0.31 sec)

insert 명령을 사용하여 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable values('112,114,567,Java,345');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable values('222,214,256');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable values('2,567,98,C');
Query OK, 1 row affected (0.06 sec)

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

mysql> select *from DemoTable;

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

+----------------------+
| ListOfValues         |
+----------------------+
| 112,114,567,Java,345 |
| 222,214,256          |
| 2,567,98,C           |
+----------------------+
3 rows in set (0.00 sec)

FIND_IN_SET() 함수의 동작 원리

FIND_IN_SET(검색값, 값목록) 형태로 사용하며, 값목록 내에서 검색값이 발견되면 1부터 시작하는 위치 값을 반환하고, 발견되지 않으면 0을 반환합니다. 따라서 조건식에서 find_in_set(...) > 0처럼 비교하면 해당 값이 포함된 행만 정확하게 조회할 수 있습니다.

다음은 MySQL에서 특정 행을 선택하는 쿼리입니다.

mysql> select *from DemoTable where find_in_set('2',ListOfValues) >0;

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

+--------------+
| ListOfValues |
+--------------+
| 2,567,98,C   |
+--------------+
1 row in set (0.03 sec)

결과를 보면 '2'라는 값이 포함된 행만 정확히 필터링되어 반환된 것을 확인할 수 있습니다. 참고로 LIKE '%2%' 조건을 사용하면 '222'나 '12' 같은 다른 값까지 함께 매칭될 수 있으므로, 쉼표로 구분된 목록에서 정확한 일치 여부를 확인할 때는 FIND_IN_SET()을 사용하는 것이 가장 안전합니다.