Categorias:

Funções de cadeia de caracteres e binários (Correspondência/Comparação)

EDITDISTANCE

Calcula a distância Levenshtein entre duas cadeias de caracteres de entrada. É o número de inserções, exclusões ou substituições de um único caractere necessárias para converter uma cadeia de caracteres em outra.

Nota

Ao contrário de algumas outras métricas (por exemplo, distância Damerau-Levenshtein), as transposições de caracteres não são consideradas.

Sintaxe

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

Argumentos

Obrigatório:

string_expr1, . string_expr2

As cadeias de caracteres de entrada.

Opcional:

max_distance

Expressão inteira que especifica a distância máxima a ser calculada.

Quando a distância entre as cadeias de caracteres excede esse número, a função para de calcular a distância e apenas retorna a distância máxima.

Especificar este argumento tem o mesmo efeito que chamar LEAST( EDITDISTANCE( string_expr1, string_expr2 ), max_distance ).

Se você especificar um número negativo (isto é, -n), a função usará 0 como distância máxima e retornará 0.

Notas de uso

  • O tempo de execução da função EDITDISTANCE é proporcional ao produto dos comprimentos das cadeias de caracteres de entrada.

  • Para um melhor desempenho, o Snowflake recomenda o uso de cadeias de caracteres de entrada não maiores do que 4096 caracteres.

    Você também pode usar o argumento opcional max_distance para definir um limite superior para a distância calculada.

Detalhes do agrupamento

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.

O resultado se baseia unicamente nos caracteres das cadeias de caracteres, não nas especificações de agrupamento das cadeias de caracteres.

Exemplos

O exemplo seguinte calcula a distância entre as cadeias de caracteres nas colunas s e t na tabela ed.

As duas últimas colunas utilizam o argumento max_distance para especificar a distância máxima a ser calculada:

  • Quando max_distance é 3, a função retorna 3 se a distância entre as cadeias de caracteres for maior ou igual a 3 (como mostrado abaixo).

  • Se max_distance for um número negativo (por exemplo, -1, como mostrado abaixo), a função usa 0 como distância máxima e retorna 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

O próximo exemplo retorna FALSE se a distância entre duas cadeias de caracteres for pelo menos 2. Como max_distance é especificado como 2, a função para de calcular a distância uma vez que a distância é determinada como sendo pelo menos 2. (A distância real entre as cadeias de caracteres de entrada é 6).

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

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