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

MySQL LOCATE() 함수가 NULL을 반환하는 이유와 해결 방법

MySQL LOCATE() 함수가 NULL을 반환하는 경우

MySQL의 LOCATE() 함수는 문자열 내에서 특정 부분 문자열(substring)이 처음 나타나는 위치를 반환하는 함수입니다. 그런데 이 함수는 첫 번째 인수(찾으려는 부분 문자열) 또는 두 번째 인수(검색 대상 문자열) 중 하나라도 NULL인 경우 결과값 대신 NULL을 반환합니다.

즉, 검색하려는 값 자체가 NULL이거나 검색 대상 컬럼의 값이 NULL이라면 위치 정보를 구할 수 없기 때문에 MySQL은 오류 대신 NULL을 출력합니다.

예제 1: 첫 번째 인수가 NULL인 경우

mysql> SELECT LOCATE(NULL, 'Ram is a good boy') AS Result;

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

1 row in set (0.00 sec)

위 예제에서는 찾으려는 부분 문자열 자리에 NULL이 들어갔기 때문에 결과로 NULL이 반환됩니다.

예제 2: 두 번째 인수가 NULL인 경우

mysql> SELECT LOCATE('Ram', NULL) AS Result;

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

1 row in set (0.00 sec)

반대로 검색 대상 문자열이 NULL인 경우에도 마찬가지로 NULL이 반환됩니다.

NULL 반환 문제 해결하기

실무에서는 NULL이 반환되어 쿼리 결과나 애플리케이션 로직에 영향을 주지 않도록 IFNULL() 또는 COALESCE() 함수를 함께 사용하는 것이 좋습니다.

mysql> SELECT IFNULL(LOCATE('Ram', NULL), 0) AS Result;

+--------+
| Result |
+--------+
| 0      |
+--------+

1 row in set (0.00 sec)

이렇게 하면 인수 중 하나가 NULL이더라도 기본값(예: 0)을 반환하도록 처리할 수 있어, 후속 연산이나 조건 비교 시 예기치 않은 오류를 방지할 수 있습니다.

정리

  • LOCATE() 함수는 부분 문자열 또는 검색 대상 문자열 중 하나라도 NULL이면 NULL을 반환한다.
  • NULL 처리를 원한다면 IFNULL()이나 COALESCE()로 감싸서 기본값을 지정하는 것이 안전하다.