카테고리:

문자열 및 이진 함수 (일치/비교)

POSITION

두 번째 인자에서 첫 번째 인자의 첫 번째 발생을 검색하고, 성공하는 경우 두 번째 인자에서 첫 번째 인자의 위치(1부터 시작)를 반환합니다.

별칭

CHARINDEX

CHARINDEX 함수는 POSITION이 지원하는 구문 변형 중 하나를 지원하지 않습니다.

구문

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

POSITION( <expr1> IN <expr2> )
Copy

인자

필수:

expr1

찾을 값을 나타내는 문자열 또는 이진 식입니다.

expr2

검색할 값을 나타내는 문자열 또는 이진 식입니다.

선택 사항:

start_pos

검색을 시작할 위치를 나타내는 숫자입니다(1expr2 의 시작을 나타냄).

기본값: 1

사용법 노트

  • 어느 인자가 NULL인 경우, 함수는 NULL을 반환합니다.

  • 문자열 또는 이진 값을 찾을 수 없는 경우, 함수는 다음을 0 을 반환합니다.

  • 지정된 선택적 start_pos 가 두 번째 인자(검색할 문자열)의 끝을 벗어나는 경우, 함수는 0 을 반환합니다.

  • 첫 번째 인자가 비어 있는 경우(예: 빈 문자열), 함수는 1 을 반환합니다.

  • 처음 두 인자의 데이터 타입은 동일해야 합니다. 즉, 둘 다 문자열이거나 둘 다 이진 값이어야 합니다.

데이터 정렬 세부 정보

이 함수는 다음 데이터 정렬 사양을 지원하지 않습니다.

  • lower.

  • upper.

  • pi (구두점 구분 안 함).

  • cs-ai (대/소문자 구분, 악센트 구분 안 함).

VARCHAR 식

〈banana’에서 〈an’의 첫 번째 발생을 찾습니다.

select position('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
|                           2 |
+-----------------------------+
Copy

위치 3에서 또는 그 이후에 〈banana’에서 〈an’의 첫 번째 발생을 찾습니다. 이 검색은 〈an’의 두 번째 발생을 찾습니다.

select position('an', 'banana', 3);
+-----------------------------+
| POSITION('AN', 'BANANA', 3) |
|-----------------------------|
|                           4 |
+-----------------------------+
Copy

문자열에서 유니코드 문자를 포함한 다양한 문자를 검색합니다.

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 |
+--------+---------------------+------------------+
Copy

BINARY 식

아래 값은 16진수 표현이므로 단일 BINARY 바이트는 두 개의 16진수로 표현됩니다.

이 예에서 반환된 값은 3입니다. 〈EF’가 세 번째 바이트와 일치하기 때문입니다(첫 번째 바이트는 〈AB〉, 두 번째 바이트는 〈CD〉, 세 번째 바이트는 〈EF〉).

select position(X'EF', X'ABCDEF');
+----------------------------+
| POSITION(X'EF', X'ABCDEF') |
|----------------------------|
|                          3 |
+----------------------------+
Copy

이 예에서는 일치하는 항목이 없습니다. 시퀀스 〈BC’는 검색되는 값에 있는 것처럼 보이지만, 〈B’는 첫 번째 바이트의 두 번째 니블이고 〈C’는 두 번째 바이트의 첫 번째 니블입니다. 실제로 〈BC’를 포함하는 바이트가 없으므로, 반환된 값은 0(찾을 수 없음)입니다.

select position(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
|                        0 |
+--------------------------+
Copy