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

MySQL INSTR()와 FIND_IN_SET() 함수의 차이점 완벽 정리

MySQL INSTR()와 FIND_IN_SET() 함수란?

MySQL에서 INSTR() 함수와 FIND_IN_SET() 함수는 모두 문자열을 검색하는 데 사용되는 함수입니다. 두 함수는 비슷한 목적으로 사용되지만, 동작 방식과 용도에 있어 중요한 차이점이 존재합니다.

1. 인자 구조의 차이

FIND_IN_SET() 함수는 쉼표(,)로 구분된 부분 문자열들을 포함하는 하나의 문자열 리스트를 인자로 받습니다. 반면 INSTR() 함수는 단일 문자열을 인자로 받아, 해당 문자열 안에서 부분 문자열이 처음 나타나는 위치를 반환합니다.

2. 정수 검색 시 적합성 차이

정수 값을 검색할 때는 FIND_IN_SET() 함수가 INSTR() 함수보다 훨씬 더 적합합니다. 아래 예제를 통해 그 이유를 확인할 수 있습니다.

예제

mysql> Select IF(INSTR('10,11,12,13',2) > 0,1,0) As Result;
+--------+
| Result |
+--------+
|      1 |
+--------+
1 row in set (0.05 sec)

mysql> Select IF(FIND_IN_SET(2,'10,11,12,13') > 0,1,0)As Result;
+--------+
| Result |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

결과 분석

위 예제의 결과를 보면, INSTR() 함수는 실제로 '2'라는 값이 리스트에 존재하지 않음에도 불구하고 결과로 1을 반환했습니다. 그 이유는 INSTR()가 부분 문자열 매칭 방식으로 동작하기 때문에 '12'나 '13' 같은 숫자 내부에 '2'가 포함되어 있다고 판단하기 때문입니다.

반면 FIND_IN_SET() 함수는 쉼표로 구분된 각 항목을 독립적인 값으로 취급하므로, '2'가 리스트에 없다는 올바른 판단으로 0을 반환합니다. 따라서 쉼표로 구분된 목록에서 특정 값을 정확히 찾아야 하는 경우에는 FIND_IN_SET() 함수를 사용하는 것이 훨씬 안전하고 정확합니다.