ETC
[SQL] LOCATE 를 통한 문자열 처음 등장 위치 확인
lim
2022. 1. 19. 22:41
반응형
특정 문자열이 몇번째에 등장하는지 알고 싶다면 어떻게 해야할까? 이를 위해 SQL에서는 LOCATE라는 문법을 제공한다.
LOCATE
SELECT LOCATE(substr, str, [pos]);
문법은 위와 같다. 검색하고자 하는 서브 스트링 substr을 str에서 검색하고, 해당 substr이 나타나는 위치를 반환해준다. 만약 substr이 str에 없는 경우 0을 반환한다. 한번 예제로 살펴보자.
SELECT LOCATE('test', 'pre test') ;
>> 5
SELECT LOCATE('no', 'pre test') ;
>> 0
pos 값 주기
SELECT LOCATE(substr, str, [pos]);
pos는 선택적으로 넣을수 있는 값인데, 해당 인자에 값을 주게 되면 해당 인자의 위치에서 부터 검색을 시작하게 된다.
SELECT LOCATE('test', 'test pre test', 5) ;
>> 10
test가 1번 위치에 존재하지만, pos에 5 값이 주어졌으므로 5번째 문자부터 검사를 시작한다. 즉 5번째 문자 후로 가장 먼저나오는 test의 위치인 10을 리턴한다.
LOCATE를 활용하여 문자열 포함 검색하기
org | value | |
1 | 판매 | 1000 |
2 | 소프트웨어 개발 | 200 |
LIKE 를 통해서 원하는 문자열이 컬럼 데이터안에 있는지를 검사할 수 있다.
SELECT * FROM test WHERE org LIKE '%판매%';
보통 LIKE는 찾고자 하는 문자열이 서브스트링인 경우에 유용하지만 그 반대의 경우에는 사용할 수가 없다. 예를 들어 컬럼에 있는 데이터가 주어지는 값의 서브스트링인 값들을 찾고 싶을때는 어떻게 해야할까?
즉 '판촉 소프트웨어 개발'의 서브스트링을 해당 테이블에서 찾고 싶다면 어떻게 해야할까? 이때는 LIKE로 검색을 할 수는 없고 LOCATE를 활용하여 검색할 수 있다.
SELECT * FROM test WHERE LOCATE(org, '판촉 소프트웨어 개발') > 0 ;
즉 위의 쿼리 처럼 substr에 대상 컬럼을 주고, 문자열을 인자로 준 후 LOCATE 함수의 리턴 값이 0보다 클때 값을 리턴해주면 된다.
반응형