POSITION

POSITION

POSITION 함수는 두 번째 인자에서 첫 번째 인자의 첫 번째 출현 위치를 검색하고, 찾으면 두 번째 인자에서 첫 번째 인자의 위치(1부터 시작)를 반환해요.

첫 번째 출현 이후의 위치를 찾아야 한다면(예: 세 번째 출현), REGEXP_INSTR 함수를 사용할 수 있어요.

별칭(Aliases): CHARINDEX — 단, CHARINDEX 함수는 POSITION이 지원하는 구문 변형 중 하나를 지원하지 않아요.

출처: 문서

본문

문법 (Syntax)

POSITION( <expr1>, <expr2> [ , <start_pos> ] )

POSITION( <expr1> IN <expr2> )

인자 (Arguments)

필수 (Required):

  • expr1 — 찾으려는 값을 나타내는 문자열 또는 이진(binary) 표현식이에요.
  • expr2 — 검색할 값을 나타내는 문자열 또는 이진 표현식이에요.

선택 (Optional):

  • start_pos — 검색을 시작할 위치를 나타내는 숫자예요 (1은 expr2의 시작을 나타내요). 기본값: 1

반환 (Returns)

이 함수는 NUMBER 타입의 값을 반환해요. 인자 중 하나라도 NULL이면 함수는 NULL을 반환해요.

사용 메모 (Usage notes)

  • 문자열 또는 이진 값을 찾지 못하면 함수는 0을 반환해요.
  • 지정한 선택적 start_pos가 두 번째 인자(검색할 문자열)의 끝을 넘어서면 함수는 0을 반환해요.
  • 첫 번째 인자가 비어 있으면(예: 빈 문자열) 함수는 1을 반환해요.
  • 처음 두 인자의 데이터 타입은 동일해야 해요 (둘 다 문자열 또는 둘 다 이진 값).

대조(collation) 세부사항

이 함수는 다음 대조 지정을 지원하지 않아요:

  • pi (punctuation-insensitive, 구두점 무시).
  • cs-ai (case-sensitive, accent-insensitive, 대소문자 구분·발음 구별 부호 무시).

예제 (Examples)

다음 예제들은 POSITION 함수를 사용해요.

VARCHAR 표현식

‘banana’에서 ‘an’의 첫 번째 출현 위치를 찾아요:

SELECT POSITION('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
|                           2 |
+-----------------------------+

‘banana’에서 위치 3 이후의 ‘an’의 첫 번째 출현 위치를 찾아요. 이 검색은 ‘an’의 두 번째 출현을 찾아요.

SELECT POSITION('an', 'banana', 3);
+-----------------------------+
| POSITION('AN', 'BANANA', 3) |
|-----------------------------|
|                           4 |
+-----------------------------+

유니코드 문자를 포함한 다양한 문자를 문자열에서 검색해요:

SELECT n, h, POSITION(n IN h) FROM pos;
+--------+---------------------+------------------+
| N      | H                   | POSITION(N IN H) |
|--------+---------------------+------------------|
|        |                     |                1 |
|        | sth                 |                1 |
| 43     | 41424344            |                5 |
| a      | NULL                |             NULL |
| dog    | catalog             |                0 |
| log    | catalog             |                5 |
| lésine | le péché, la lésine |               14 |
| nicht  | Ich weiß nicht      |               10 |
| sth    |                     |                0 |
| ☃c     | ☃a☃b☃c☃d            |                5 |
| ☃☃     | bunch of ☃☃☃☃       |               10 |
| ❄c     | ❄a☃c❄c☃             |                5 |
| NULL   | a                   |             NULL |
| NULL   | NULL                |             NULL |
+--------+---------------------+------------------+

BINARY 표현식

아래 값들은 16진수 표현이므로, BINARY 바이트 하나는 16진수 두 자리로 나타내져요.

이 예제에서 반환 값은 3이에요. ‘EF’가 3번째 바이트와 일치하기 때문이에요 (첫 번째 바이트는 ‘AB’, 두 번째 바이트는 ‘CD’, 세 번째 바이트는 ‘EF’):

SELECT POSITION(X'EF', X'ABCDEF');
+----------------------------+
| POSITION(X'EF', X'ABCDEF') |
|----------------------------|
|                          3 |
+----------------------------+

이 예제에서는 일치하는 게 없어요. ‘BC’ 시퀀스가 검색되는 값 안에 있는 것처럼 보이지만, ‘B’는 첫 번째 바이트의 두 번째 니블(nibble)이고, ‘C’는 두 번째 바이트의 첫 번째 니블이에요. 실제로 ‘BC’를 포함하는 바이트가 없으므로 반환 값은 0(찾지 못함)이에요.

SELECT POSITION(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
|                        0 |
+--------------------------+

더 알아보기 (Learn more)