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

MySQL의 FIELD() 함수와 FIND_IN_SET() 함수, 무엇이 다를까?

MySQL에는 인자로 전달된 값들 중에서 특정 문자열을 검색하는 데 사용되는 함수가 여러 가지 있습니다. 그중 FIELD() 함수와 FIND_IN_SET() 함수는 비슷한 용도로 사용되지만, 동작 방식과 결과 처리에서 몇 가지 중요한 차이점이 있습니다.

1. 문자열 리스트 처리 방식의 차이

FIND_IN_SET() 함수는 하나의 문자열 리스트를 사용합니다. 이 리스트 자체가 하나의 문자열이며, 내부에 포함된 부분 문자열들은 쉼표(,)로 구분되어 있습니다.

반면 FIELD() 함수는 서로 다른 여러 개의 문자열들을 개별 인자로 전달받습니다. 그리고 검색하려는 문자열이 이 목록에 존재할 경우, 해당 문자열의 위치(인덱스 번호)를 반환합니다.

2. NULL 처리 방식의 차이

FIND_IN_SET() 함수는 검색 문자열 또는 문자열 리스트 중 어느 하나라도 NULL이면 결과로 NULL을 반환합니다.

반면 FIELD() 함수는 검색 문자열이 NULL일 경우 NULL을 반환하지 않고 0을 반환합니다. 즉, 일치하는 항목이 없는 것과 동일하게 처리됩니다.

예제

아래 예제를 통해 두 함수의 NULL 처리 차이를 직접 확인할 수 있습니다.

mysql> Select FIND_IN_SET(NULL,'Ram is a good boy') AS Result;

+--------+
| Result |
+--------+
| NULL   |
+--------+

1 row in set (0.00 sec)

mysql> SELECT FIND_IN_SET('RAM',NULL) AS RESULT;

+--------+
| RESULT |
+--------+
| NULL   |
+--------+

1 row in set (0.00 sec)

mysql> Select FIELD(NULL,'Ram','is','good','boy');

+-------------------------------------+
| FIELD(NULL,'Ram','is','good','boy') |
+-------------------------------------+
|                                   0 |
+-------------------------------------+

1 row in set (0.00 sec)

위 실행 결과에서 볼 수 있듯이, FIND_IN_SET()은 인자 중 하나가 NULL이면 NULL을 반환하는 반면, FIELD()는 검색 문자열이 NULL일 때 0을 반환합니다. 이러한 차이를 이해하고 있으면 상황에 맞는 적절한 함수를 선택하는 데 큰 도움이 됩니다.