- 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> ] )
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 retorna3
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 usa0
como distância máxima e retorna0
.
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] |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
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 |
+---------------------------------------+