본문으로 건너뛰기
최종 수정: 에

POSITION

설명​

POSITION 함수는 대상 문자열에서 부분 문자열의 위치를 찾는 데 사용되며, 위치는 1부터 계산합니다.

구문​

POSITION(<substr> IN <str>)

POSITION(<substr>, <str> [, <pos>])

매개변수​

매개변수설명
substr검색할 부분 문자열입니다. 유형: VARCHAR
str검색 대상 문자열입니다. 유형: VARCHAR
pos검색 시작 위치(1부터 시작)를 지정하는 선택적 매개변수입니다. 지정하면 해당 위치부터 검색합니다

반환 값​

부분 문자열이 대상 문자열에서 처음 나타나는 위치를 INT 유형으로 반환합니다.

검색 규칙:

  • 위치 인덱스는 1부터 시작합니다
  • 부분 문자열을 찾지 못하면 0을 반환합니다
  • 시작 위치를 지정하면 해당 위치부터 검색합니다
  • 대소문자를 구분합니다

특수한 경우:

  • 매개변수 중 하나라도 NULL이면 NULL을 반환합니다
  • 부분 문자열이 빈 문자열이면 1(또는 시작 위치)을 반환합니다
  • 시작 위치가 문자열 길이를 초과하면 0을 반환합니다
  • 시작 위치가 음수이면 문자열의 처음부터 검색합니다

예제​

  1. 기본 검색(두 가지 구문)
SELECT POSITION('bar' IN 'foobarbar'), POSITION('bar', 'foobarbar');
+----------------------------------+--------------------------------+
| POSITION('bar' IN 'foobarbar') | POSITION('bar', 'foobarbar') |
+----------------------------------+--------------------------------+
| 4 | 4 |
+----------------------------------+--------------------------------+
  1. 시작 위치를 지정한 검색
SELECT POSITION('bar', 'foobarbar', 5), POSITION('xbar', 'foobar');
+-----------------------------------+----------------------------------+
| POSITION('bar', 'foobarbar', 5) | POSITION('xbar', 'foobar') |
+-----------------------------------+----------------------------------+
| 7 | 0 |
+-----------------------------------+----------------------------------+
  1. NULL 값 처리
SELECT POSITION('test' IN NULL), POSITION(NULL, 'test');
+--------------------------+------------------------+
| POSITION('test' IN NULL) | POSITION(NULL, 'test') |
+--------------------------+------------------------+
| NULL | NULL |
+--------------------------+------------------------+
  1. 빈 문자열 처리
SELECT POSITION('' IN 'hello'), POSITION('world' IN '');
+------------------------+------------------------+
| POSITION('' IN 'hello') | POSITION('world' IN '') |
+------------------------+------------------------+
| 1 | 0 |
+------------------------+------------------------+
  1. 대소문자를 구분하는 검색
SELECT POSITION('World' IN 'Hello World'), POSITION('world' IN 'Hello World');
+----------------------------------+----------------------------------+
| POSITION('World' IN 'Hello World') | POSITION('world' IN 'Hello World') |
+----------------------------------+----------------------------------+
| 7 | 0 |
+----------------------------------+----------------------------------+
  1. 서로 다른 위치에서 검색
SELECT POSITION('a', 'banana', 1), POSITION('a', 'banana', 3);
+-----------------------------+-----------------------------+
| POSITION('a', 'banana', 1) | POSITION('a', 'banana', 3) |
+-----------------------------+-----------------------------+
| 2 | 4 |
+-----------------------------+-----------------------------+
  1. UTF-8 멀티바이트 문자
SELECT POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello'), POSITION('hello', 'ṭṛì ḍḍumai hello', 8);
+-------------------------------------------------------+---------------------------------------------------+
| POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello') | POSITION('hello', 'ṭṛì ḍḍumai hello', 8) |
+-------------------------------------------------------+---------------------------------------------------+
| 5 | 12 |
+-------------------------------------------------------+---------------------------------------------------+
  1. 특수 문자 검색
SELECT POSITION('@' IN 'user@domain.com'), POSITION('.', 'user@domain.com', 10);
+----------------------------------+--------------------------------------+
| POSITION('@' IN 'user@domain.com') | POSITION('.', 'user@domain.com', 10) |
+----------------------------------+--------------------------------------+
| 5 | 12 |
+----------------------------------+--------------------------------------+
  1. 범위를 벗어난 시작 위치
SELECT POSITION('test', 'hello world', 20), POSITION('test', 'hello world', 0);
+--------------------------------------+-------------------------------------+
| POSITION('test', 'hello world', 20) | POSITION('test', 'hello world', 0) |
+--------------------------------------+-------------------------------------+
| 0 | 0 |
+--------------------------------------+-------------------------------------+
  1. 숫자와 기호로 이루어진 문자열에서 검색
SELECT POSITION('123' IN '456123789'), POSITION('-', 'phone: 123-456-7890', 11);
+------------------------------+-------------------------------------------+
| POSITION('123' IN '456123789') | POSITION('-', 'phone: 123-456-7890', 11) |
+------------------------------+-------------------------------------------+
| 4 | 11 |
+------------------------------+-------------------------------------------+