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

MySQL FIND_IN_SET() 함수가 NULL을 반환하는 경우는 언제일까?

MySQL의 FIND_IN_SET() 함수는 인자 중 하나라도 NULL이면 결과로 NULL을 반환합니다. 즉, 검색 문자열(search string) 또는 문자열 목록(string list) 중 어느 하나가 NULL인 경우뿐만 아니라, 두 인자가 모두 NULL일 때에도 역시 NULL이 반환됩니다.

FIND_IN_SET()이 NULL을 반환하는 경우

FIND_IN_SET() 함수는 기본적으로 첫 번째 인자(검색할 문자열)가 두 번째 인자(쉼표로 구분된 문자열 목록) 내에서 몇 번째 위치에 있는지를 반환하는 함수입니다. 하지만 다음과 같은 경우에는 정상적인 위치 값 대신 NULL을 출력합니다.

  • 검색 문자열이 NULL인 경우
  • 문자열 목록이 NULL인 경우
  • 두 인자가 모두 NULL인 경우

예제

1. 검색 문자열이 NULL인 경우

mysql> Select FIND_IN_SET(NULL,'Ram is a good boy') AS Result;
+--------+
| Result |
+--------+
| NULL   |
+--------+
1 row in set (0.00 sec)

첫 번째 인자가 NULL이므로 검색 대상이 존재하지 않아 결과는 NULL입니다.

2. 문자열 목록이 NULL인 경우

mysql> SELECT FIND_IN_SET('RAM',NULL) AS RESULT;
+--------+
| RESULT |
+--------+
| NULL   |
+--------+
1 row in set (0.00 sec)

문자열 목록 자체가 NULL이기 때문에 검색할 범위가 없어 결과는 NULL로 반환됩니다.

3. 두 인자가 모두 NULL인 경우

mysql> SELECT FIND_IN_SET(NULL,NULL);
+------------------------+
| FIND_IN_SET(NULL,NULL) |
+------------------------+
|                    NULL |
+------------------------+
1 row in set (0.00 sec)

당연히 두 인자가 모두 NULL이면 결과 역시 NULL입니다.

정리

FIND_IN_SET() 함수를 실무에서 사용할 때는 인자로 전달되는 값에 NULL이 포함될 가능성을 항상 고려해야 합니다. 특히 컬럼 값이나 동적으로 생성된 문자열을 인자로 넘길 경우, IFNULL() 함수 등을 활용해 NULL 처리를 사전에 해두면 예상치 못한 NULL 반환으로 인한 오류를 방지할 수 있습니다.