카테고리:

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

CHARINDEX

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

별칭

POSITION

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

구문

CHARINDEX( <expr1>, <expr2> [ , <start_pos> ] )
Copy

인자

필수:

expr1

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

expr2

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

선택 사항:

start_pos

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

기본값: 1

사용법 노트

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

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

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

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

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

데이터 정렬 세부 정보

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

  • lower.

  • upper.

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

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

VARCHAR 식

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

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

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

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

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

SELECT n, h, CHARINDEX(n, h) FROM pos;

+--------+---------------------+-----------------+
| N      | H                   | CHARINDEX(N, 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 CHARINDEX(X'EF', X'ABCDEF');
+-----------------------------+
| CHARINDEX(X'EF', X'ABCDEF') |
|-----------------------------|
|                           3 |
+-----------------------------+
Copy

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

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