최종 수정: 에
LOCATE
설명
LOCATE 함수는 문자열 str에서 부분 문자열 substr이 처음 나타나는 위치를 반환합니다(위치는 1부터 계산합니다). 선택적 세 번째 매개변수 pos를 지정하면 문자열 str의 지정된 위치부터 검색을 시작합니다. MySQL과 호환되는 함수로, 문자열 일치 여부를 확인하거나 위치를 찾는 데 자주 사용됩니다.
구문
LOCATE(<substr>, <str> [, <pos>])
매개변수
| 매개변수 | 설명 |
|---|---|
<substr> | 찾을 부분 문자열입니다. 타입: VARCHAR |
<str> | 검색 대상 원본 문자열입니다. 타입: VARCHAR |
<pos> | 검색을 시작할 위치를 지정하는 선택적 매개변수입니다(위치는 1부터 계산). 타입: INT |
반환값
INT 타입을 반환하며, 반환값은 str에서 substr이 처음 나타나는 위치를 나타냅니다(위치는 1부터 계산합니다).
검색 규칙:
- 위치는 1부터 계산합니다(0부터 시작하지 않음).
- 처음 일치하는 위치를 반환합니다.
- pos를 지정하면 해당 위치부터 검색하지만, 반환되는 위치는 문자열 시작을 기준으로 한 절대 위치입니다.
- 검색 시 대소문자를 구분합니다.
특수한 경우:
- 일치하는 항목이 없으면 0을 반환합니다.
- 매개변수 중 하나라도 NULL이면 NULL을 반환합니다.
- substr이 빈 문자열이면 1을 반환합니다(pos를 지정했고 pos > 1이면 pos 값을 반환).
- str이 빈 문자열이고 substr은 빈 문자열이 아니면 0을 반환합니다.
- pos가 1보다 작으면 0을 반환합니다.
- pos가 str의 길이보다 크면 0을 반환합니다.
예제
- 기본 검색
SELECT LOCATE('bar', 'foobarbar'), LOCATE('xbar', 'foobar'), LOCATE('bar', 'foobarbar', 5);
+----------------------------+--------------------------+-------------------------------+
| LOCATE('bar', 'foobarbar') | LOCATE('xbar', 'foobar') | LOCATE('bar', 'foobarbar', 5) |
+----------------------------+--------------------------+-------------------------------+
| 4 | 0 | 7 |
+----------------------------+--------------------------+-------------------------------+
- 첫 번째 문자 찾기
SELECT LOCATE('f', 'foobar'), LOCATE('r', 'foobar');
+-----------------------+-----------------------+
| LOCATE('f', 'foobar') | LOCATE('r', 'foobar') |
+-----------------------+-----------------------+
| 1 | 6 |
+-----------------------+-----------------------+
- 일치하는 항목이 없는 경우
SELECT LOCATE('xyz', 'foobar'), LOCATE('FOO', 'foobar');
+-------------------------+-------------------------+
| LOCATE('xyz', 'foobar') | LOCATE('FOO', 'foobar') |
+-------------------------+-------------------------+
| 0 | 0 |
+-------------------------+-------------------------+
- NULL 처리
SELECT LOCATE(NULL, 'foobar'), LOCATE('foo', NULL), LOCATE(NULL, NULL);
+------------------------+---------------------+--------------------+
| LOCATE(NULL, 'foobar') | LOCATE('foo', NULL) | LOCATE(NULL, NULL) |
+------------------------+---------------------+--------------------+
| NULL | NULL | NULL |
+------------------------+---------------------+--------------------+
- 빈 문자열 처리
SELECT LOCATE('', 'foobar'), LOCATE('foo', ''), LOCATE('', '');
+----------------------+-------------------+----------------+
| LOCATE('', 'foobar') | LOCATE('foo', '') | LOCATE('', '') |
+----------------------+-------------------+----------------+
| 1 | 0 | 1 |
+----------------------+-------------------+----------------+
- 시작 위치 지정
SELECT LOCATE('o', 'foobar', 1), LOCATE('o', 'foobar', 2), LOCATE('o', 'foobar', 4);
+--------------------------+--------------------------+--------------------------+
| LOCATE('o', 'foobar', 1) | LOCATE('o', 'foobar', 2) | LOCATE('o', 'foobar', 4) |
+--------------------------+--------------------------+--------------------------+
| 2 | 2 | 0 |
+--------------------------+--------------------------+--------------------------+
- 위치 인수의 경곗값
SELECT LOCATE('foo', 'foobar', 0), LOCATE('foo', 'foobar', -1), LOCATE('foo', 'foobar', 10);
+----------------------------+-----------------------------+-----------------------------+
| LOCATE('foo', 'foobar', 0) | LOCATE('foo', 'foobar', -1) | LOCATE('foo', 'foobar', 10) |
+----------------------------+-----------------------------+-----------------------------+
| 0 | 0 | 0 |
+----------------------------+-----------------------------+-----------------------------+
- UTF-8 부분 문자열 검색
SELECT LOCATE('ṛì', 'ṭṛì ḍḍumai'), LOCATE('ḍḍu', 'ṭṛì ḍḍumai');
+----------------------------------------+------------------------------------------+
| LOCATE('ṛì', 'ṭṛì ḍḍumai') | LOCATE('ḍḍu', 'ṭṛì ḍḍumai') |
+----------------------------------------+------------------------------------------+
| 2 | 5 |
+----------------------------------------+------------------------------------------+
- 대소문자 구분
SELECT LOCATE('BAR', 'foobar'), LOCATE('Bar', 'foobar'), LOCATE('bar', 'fooBAR');
+-------------------------+-------------------------+-------------------------+
| LOCATE('BAR', 'foobar') | LOCATE('Bar', 'foobar') | LOCATE('bar', 'fooBAR') |
+-------------------------+-------------------------+-------------------------+
| 0 | 0 | 0 |
+-------------------------+-------------------------+-------------------------+
- 위치 인수를 지정한 빈 부분 문자열 검색
SELECT LOCATE('', 'foobar', 3), LOCATE('', 'foobar', 7), LOCATE('', '', 1);
+-------------------------+-------------------------+-------------------+
| LOCATE('', 'foobar', 3) | LOCATE('', 'foobar', 7) | LOCATE('', '', 1) |
+-------------------------+-------------------------+-------------------+
| 3 | 0 | 1 |
+-------------------------+-------------------------+-------------------+