최종 수정: 에
COUNT_SUBSTRINGS
설명
COUNT_SUBSTRINGS 함수는 문자열에서 지정된 부분 문자열이 나타나는 횟수를 계산합니다. 참고: 현재 구현은 일치하는 부분을 찾으면 부분 문자열의 길이만큼 이동한 후 검색을 계속합니다. 예를 들어 str='ccc'이고 pattern='cc'이면 반환되는 결과는 1입니다.
구문
COUNT_SUBSTRINGS(<str>, <pattern>[, <start_pos>])
매개변수
| 매개변수 | 설명 |
|---|---|
<str> | 검색할 문자열. 타입: STRING |
<pattern> | 일치 여부를 확인할 부분 문자열. 타입: STRING |
<start_pos> | 검색을 시작할 위치(1부터 시작). 타입: INT. 선택 사항 |
반환값
부분 문자열이 문자열에 나타나는 횟수를 나타내는 INT 타입 값을 반환합니다.
특수한 경우:
- str이 NULL이면 NULL을 반환합니다.
- pattern이 빈 문자열이면 0을 반환합니다.
- str이 빈 문자열이면 0을 반환합니다.
- start_pos가 0 이하이거나 문자열 길이를 초과하면 0을 반환합니다.
- pattern이 str보다 길거나 start_pos부터 시작하는 str의 나머지 부분보다 길면 0을 반환합니다.
동작 변경 (4.1.4)
4.1.4에서는 문자열 끝에서 범위를 벗어난 부분까지 일치하는 것으로 처리하던 문제를 수정했습니다. 이전 버전에서는 남은 문자로 완전한 pattern을 구성할 수 없는 경우에도 일치 횟수를 한 번 더 계산할 수 있었습니다. 예를 들어 count_substrings('ab', 'abc')는 이전 버전에서 1을 반환할 수 있었지만, 수정 후에는 올바르게 0을 반환합니다. count_substrings('ccc', 'cc', 3)은 수정 후 0을 반환합니다.
예제
- 기본 사용법
SELECT count_substrings('a1b1c1d', '1');
+----------------------------------+
| count_substrings('a1b1c1d', '1') |
+----------------------------------+
| 3 |
+----------------------------------+
- 쉼표가 연속으로 나타나는 경우
SELECT count_substrings(',,a,b,c,', ',');
+-----------------------------------+
| count_substrings(',,a,b,c,', ',') |
+-----------------------------------+
| 5 |
+-----------------------------------+
- 부분 문자열이 겹치는 경우
SELECT count_substrings('ccc', 'cc');
+--------------------------------+
| count_substrings('ccc', 'cc') |
+--------------------------------+
| 1 |
+--------------------------------+
- NULL 값 처리
SELECT count_substrings(NULL, ',');
+-----------------------------+
| count_substrings(NULL, ',') |
+-----------------------------+
| NULL |
+-----------------------------+
- 빈 문자열 처리
SELECT count_substrings('a,b,c,abcde', '');
+-------------------------------------+
| count_substrings('a,b,c,abcde', '') |
+-------------------------------------+
| 0 |
+-------------------------------------+
- 시작 위치 매개변수 사용
SELECT count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 1),
count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 6);
+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
| count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 1) | count_substrings('ṭṛì ḍḍumai ṭṛì ti ḍḍumannàri', 'ḍḍu', 6) |
+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
| 2 | 1 |
+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
- 시작 위치가 범위를 벗어나는 경우
SELECT count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 0),
count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 30);
+------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
| count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 0) | count_substrings('éèêëìíîïðñòó éèêëìíîïðñòó', 'éèê', 30) |
+------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
| 0 | 0 |
+------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+
- 시작 위치를 지정한 멀티바이트 중국어 부분 문자열 검색
SELECT count_substrings('你好,世界!你好,世界!', '世界', 0),
count_substrings('你好,世界!你好,世界!', '世界', 30);
+-----------------------------------------------------------------------+------------------------------------------------------------------------+
| count_substrings('你好,世界!你好,世界!', '世界', 0) | count_substrings('你好,世界!你好,世界!', '世界', 30) |
+-----------------------------------------------------------------------+------------------------------------------------------------------------+
| 0 | 0 |
+-----------------------------------------------------------------------+------------------------------------------------------------------------+