MySQL에서 INSTR() 함수와 POSITION() 함수는 LOCATE() 함수와 완전히 동일하게 작동합니다. 두 함수 모두 LOCATE() 함수의 동의어(synonym)로, 문자열 안에서 특정 부분 문자열이 처음 나타나는 위치를 반환합니다.
1. INSTR() 함수
INSTR() 함수는 원본 문자열을 검색하여 부분 문자열이 처음 등장하는 위치를 반환합니다. 구문은 다음과 같습니다.
구문
INSTR(string, substring)
- string: MySQL이 검색을 수행할 원본 문자열
- substring: 찾고자 하는 부분 문자열
예제
mysql> Select INSTR('Ram is a good boy', 'good') As Result;
+--------+
| Result |
+--------+
| 10 |
+--------+
1 row in set (0.00 sec)위 예제에서 'good'이라는 단어는 'Ram is a good boy' 문자열의 10번째 위치에 있으므로 결과값으로 10이 반환됩니다.
2. POSITION() 함수
POSITION() 함수 역시 문자열에서 부분 문자열이 처음 나타나는 위치를 반환합니다. INSTR()과 기능은 같지만, 인자의 순서가 반대이며 'IN' 키워드를 사용한다는 점이 다릅니다.
구문
POSITION(substring IN string)
- substring: 찾고자 하는 부분 문자열
- string: 검색 대상이 되는 원본 문자열
- IN: 키워드
예제
mysql> Select POSITION('good' in 'Ram is a good boy') As Result;
+--------+
| Result |
+--------+
| 10 |
+--------+
1 row in set (0.00 sec)정리: 세 함수의 차이점
INSTR(), POSITION(), LOCATE() 세 함수는 모두 같은 결과를 반환하지만 몇 가지 차이가 있습니다.
- 인자 순서: INSTR(string, substring)은 원본 문자열이 먼저 오고, POSITION(substring IN string)과 LOCATE(substring, string)은 부분 문자열이 먼저 옵니다.
- 검색 시작 위치 지정: LOCATE() 함수만 세 번째 인자로 검색 시작 위치를 선택적으로 지정할 수 있습니다. 예를 들어 LOCATE('good', 'Ram is a good boy', 11)처럼 특정 위치 이후부터 검색할 수 있습니다.
따라서 단순히 첫 번째 위치만 찾는다면 세 함수 중 어떤 것을 사용해도 무방하며, 검색 시작 위치를 조절해야 하는 경우에는 LOCATE() 함수를 사용하는 것이 좋습니다.