카테고리:

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

EDITDISTANCE

두 입력 문자열 사이의 레벤슈타인 거리를 계산합니다. 한 문자열을 다른 문자열로 변환하는 데 필요한 단일 문자 삽입, 삭제 또는 대체의 수입니다.

참고

일부 다른 메트릭(예: 다메라우-레벤슈타인 거리)과 달리 문자 치환은 고려되지 않습니다.

구문

EDITDISTANCE( <string_expr1> , <string_expr2> [, <max_distance> ] )
Copy

인자

필수:

string_expr1, . string_expr2

입력 문자열입니다.

선택 사항:

max_distance

계산할 최대 거리를 지정하는 정수 식입니다.

문자열 사이의 거리가 이 숫자를 초과하는 경우, 함수는 거리 계산을 중지하고 최대 거리만 반환합니다.

이 인자를 지정하는 경우, LEAST( EDITDISTANCE( string_expr1, string_expr2 ), max_distance ) 를 호출하는 것과 같은 효과가 있습니다.

음수(즉, -n)를 지정하면 이 함수는 최대 거리로 0 을 사용하고 0 을 반환합니다.

사용법 노트

  • EDITDISTANCE 함수의 실행 시간은 입력 문자열 길이의 곱에 비례합니다.

  • 더 나은 성능을 위해 Snowflake는 4096자 이하의 입력 문자열을 사용할 것을 권장합니다.

    또한, 선택적 max_distance 인자를 사용하여, 계산된 거리의 상한을 설정할 수 있습니다.

데이터 정렬 세부 정보

No impact. In languages where the alphabet contains digraphs or trigraphs (such as 《Dz》 and 《Dzs》 in Hungarian), each character in each digraph and trigraph is treated as an independent character, not as part of a single multi-character letter.

결과는 문자열의 데이터 정렬 사양이 아니라 문자열의 문자만을 기반으로 합니다.

다음 예에서는 테이블 ed 의 열 st 에 있는 문자열 사이의 거리를 계산합니다.

마지막 두 열은 max_distance 인자를 사용하여, 계산할 최대 거리를 지정합니다.

  • max_distance3 일 때, 문자열 사이의 거리가 3보다 크거나 같으면 함수는 3 을 반환합니다(아래 참조).

  • max_distance 가 음수인 경우(예: -1, 아래 참조), 함수는 최대 거리로 0 을 사용하고 0 을 반환합니다.

SELECT s, t, EDITDISTANCE(s, t), EDITDISTANCE(t, s), EDITDISTANCE(s, t, 3), EDITDISTANCE(s, t, -1) FROM ed;

----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
      S         |        T        | EDITDISTANCE(S, T) | EDITDISTANCE(T, S) | EDITDISTANCE(S, T, 3) | EDITDISTANCE(S, T, -1) |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------|
                |                 | 0                  | 0                  | 0                     | 0                      |
 Gute nacht     | Ich weis nicht  | 8                  | 8                  | 3                     | 0                      |
 Ich weiß nicht | Ich wei? nicht  | 1                  | 1                  | 1                     | 0                      |
 Ich weiß nicht | Ich weiss nicht | 2                  | 2                  | 2                     | 0                      |
 Ich weiß nicht | [NULL]          | [NULL]             | [NULL]             | [NULL]                | [NULL]                 |
 Snowflake      | Oracle          | 7                  | 7                  | 3                     | 0                      |
 święta         | swieta          | 2                  | 2                  | 2                     | 0                      |
 [NULL]         |                 | [NULL]             | [NULL]             | [NULL]                | [NULL]                 |
 [NULL]         | [NULL]          | [NULL]             | [NULL]             | [NULL]                | [NULL]                 |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
Copy

다음 예는 두 문자열 사이의 거리가 2 이상인 경우 FALSE 를 반환합니다. max_distance2 로 지정되었기 때문에 함수는 거리가 2 이상으로 결정되면 거리 계산을 중지합니다. (입력 문자열 사이의 실제 거리는 6입니다.)

SELECT EDITDISTANCE('future', 'past', 2) < 2;

+---------------------------------------+
| EDITDISTANCE('FUTURE', 'PAST', 2) < 2 |
|---------------------------------------|
| False                                 |
+---------------------------------------+
Copy