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

MySQL LOCATE() 함수와 POSITION(), INSTR() 함수의 차이점 완벽 정리

MySQL LOCATE(), POSITION(), INSTR() 함수의 공통점과 차이점

MySQL에서 LOCATE(), POSITION(), INSTR() 함수는 모두 하나의 문자열 안에서 특정 부분 문자열(substring)이 위치한 자리를 반환하는 데 사용됩니다. 세 함수는 기본적으로 동일한 역할을 수행하지만, LOCATE() 함수는 나머지 두 함수와 몇 가지 중요한 차이점을 가지고 있습니다.

1. 검색 시작 위치 지정 가능 여부

가장 큰 차이점은 LOCATE() 함수만 선택적 인수를 통해 검색을 시작할 위치를 지정할 수 있다는 점입니다. 반면 POSITION()과 INSTR() 함수는 시작 위치를 지정하는 인수를 제공하지 않기 때문에 항상 문자열의 맨 앞에서부터 검색을 수행합니다.

2. 문법(Syntax)의 차이

세 함수는 호출 방식에서도 서로 다른 문법 구조를 사용합니다.

-- LOCATE(): 시작 위치 인수 사용 가능
LOCATE(부분문자열, 문자열 [, 시작위치])

-- POSITION(): IN 키워드 방식
POSITION(부분문자열 IN 문자열)

-- INSTR(): 인수 순서가 LOCATE()와 반대
INSTR(문자열, 부분문자열)

사용 예제

SELECT LOCATE('b', 'abcb');    -- 결과: 2
SELECT LOCATE('b', 'abcb', 3); -- 결과: 4 (3번째 위치부터 검색)
SELECT POSITION('b' IN 'abcb');-- 결과: 2
SELECT INSTR('abcb', 'b'); -- 결과: 2

위 예제에서 볼 수 있듯이, LOCATE() 함수에 세 번째 인수로 시작 위치를 전달하면 해당 위치부터 검색이 진행되어 다른 결과를 얻을 수 있습니다. 또한 INSTR() 함수는 LOCATE()와 달리 문자열과 부분 문자열의 인수 순서가 반대라는 점도 주의해야 합니다.

정리

세 함수 모두 부분 문자열의 위치를 찾는 동일한 목적을 가지지만, 검색 시작 위치를 유연하게 조절해야 하는 경우에는 LOCATE() 함수가 가장 적합합니다. 단순히 첫 번째 등장 위치만 필요하다면 POSITION()이나 INSTR() 함수를 사용해도 무방합니다.