최종 수정: 에
INSTR
설명
INSTR 함수는 원본 문자열에서 부분 문자열이 처음 나타나는 위치를 반환하며, 위치는 1부터 셉니다. 정확히 일치하는 문자열을 검색하고 대소문자를 구분하는, 자주 사용되는 문자열 검색 함수입니다. 텍스트 처리, 데이터 정제, 문자열 분석 등에 널리 사용됩니다.
구문
INSTR(<str>, <substr>)
매개변수
| 매개변수 | 설명 |
|---|---|
<str> | 검색 대상이 되는 원본 문자열. 타입: VARCHAR |
<substr> | 찾을 부분 문자열. 타입: VARCHAR |
반환 값
INT 타입을 반환하며, 원본 문자열에서 부분 문자열이 처음 나타나는 위치를 나타냅니다.
검색 규칙:
- 반환하는 위치 인덱스는 1부터 시작합니다(0부터 시작하지 않음)
- 부분 문자열이 없으면 0을 반환합니다
- 검색 시 대소문자를 구분합니다
- UTF-8 멀티바이트 문자의 위치를 올바르게 계산합니다
- 빈 문자열은 별도로 처리합니다
특수한 경우:
- 매개변수 중 하나라도 NULL이면 NULL을 반환합니다
- 부분 문자열이 빈 문자열이면 1을 반환합니다(빈 문자열은 어느 위치에나 "존재"함)
- 원본 문자열이 비어 있고 부분 문자열은 비어 있지 않으면 0을 반환합니다
- 특수 문자와 기호가 포함된 부분 문자열도 검색할 수 있습니다
예제
- 기본 문자 검색
SELECT INSTR('abc', 'b'), INSTR('abc', 'd');
+-------------------+-------------------+
| INSTR('abc', 'b') | INSTR('abc', 'd') |
+-------------------+-------------------+
| 2 | 0 |
+-------------------+-------------------+
- 부분 문자열 검색
SELECT INSTR('hello world', 'world'), INSTR('hello world', 'WORLD');
+------------------------------+------------------------------+
| INSTR('hello world', 'world') | INSTR('hello world', 'WORLD') |
+------------------------------+------------------------------+
| 7 | 0 |
+------------------------------+------------------------------+
- NULL 값 처리
SELECT INSTR(NULL, 'test'), INSTR('test', NULL);
+---------------------+---------------------+
| INSTR(NULL, 'test') | INSTR('test', NULL) |
+---------------------+---------------------+
| NULL | NULL |
+---------------------+---------------------+
- 빈 문자열 처리
SELECT INSTR('hello', ''), INSTR('', 'world');
+--------------------+---------------------+
| INSTR('hello', '') | INSTR('', 'world') |
+--------------------+---------------------+
| 1 | 0 |
+--------------------+---------------------+
- 여러 번 나타나는 경우(첫 번째 일치 위치 반환)
SELECT INSTR('abcabc', 'abc'), INSTR('banana', 'a');
+------------------------+----------------------+
| INSTR('abcabc', 'abc') | INSTR('banana', 'a') |
+------------------------+----------------------+
| 1 | 2 |
+------------------------+----------------------+
- 특수 문자와 기호
SELECT INSTR('user@example.com', '@'), INSTR('price: $99.99', '$');
+--------------------------------+-----------------------------+
| INSTR('user@example.com', '@') | INSTR('price: $99.99', '$') |
+--------------------------------+-----------------------------+
| 5 | 8 |
+--------------------------------+-----------------------------+
- UTF-8 멀티바이트 문자
SELECT INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai'), INSTR('ṭṛì ḍḍumai hello', 'hello');
+--------------------------------------------------+---------------------------------------------+
| INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai') | INSTR('ṭṛì ḍḍumai hello', 'hello') |
+--------------------------------------------------+---------------------------------------------+
| 5 | 12 |
+--------------------------------------------------+---------------------------------------------+
- 숫자로 된 문자열
SELECT INSTR('123456789', '456'), INSTR('123-456-789', '-');
+---------------------------+---------------------------+
| INSTR('123456789', '456') | INSTR('123-456-789', '-') |
+---------------------------+---------------------------+
| 4 | 4 |
+---------------------------+---------------------------+
- 여러 단어로 된 부분 문자열 검색
SELECT INSTR('The quick brown fox', 'quick'), INSTR('The quick brown fox', 'slow');
+---------------------------------------+--------------------------------------+
| INSTR('The quick brown fox', 'quick') | INSTR('The quick brown fox', 'slow') |
+---------------------------------------+--------------------------------------+
| 5 | 0 |
+---------------------------------------+--------------------------------------+
- 경로 및 URL 검색
SELECT INSTR('/home/user/file.txt', '/'), INSTR('https://www.example.com', '://');
+-----------------------------------+-----------------------------------------+
| INSTR('/home/user/file.txt', '/') | INSTR('https://www.example.com', '://') |
+-----------------------------------+-----------------------------------------+
| 1 | 6 |
+-----------------------------------+-----------------------------------------+