- Catégories :
Fonctions de chaîne et fonctions binaires (Correspondance/Comparaison)
EDITDISTANCE¶
Calcule la distance de Levenshtein entre deux chaînes d’entrée. C’est le nombre d’insertions, de suppressions ou de substitutions d’un seul caractère nécessaires pour convertir une chaîne en une autre.
Note
Contrairement à d’autres mesures (par exemple, distance Damerau-Levenshtein), les transpositions de caractères ne sont pas prises en compte.
Syntaxe¶
EDITDISTANCE( <string_expr1> , <string_expr2> [, <max_distance> ] )
Arguments¶
Obligatoire :
string_expr1
, .string_expr2
Les chaînes d’entrée.
Facultatif :
max_distance
Expression entière qui spécifie la distance maximale à calculer.
Lorsque la distance entre les chaînes dépasse ce nombre, la fonction arrête de calculer la distance et renvoie simplement la distance maximale.
Spécifier cet argument a le même effet que d’appeler
LEAST( EDITDISTANCE( string_expr1, string_expr2 ), max_distance )
.Si vous spécifiez un nombre négatif (c’est-à-dire
-n
), la fonction utilise0
comme distance maximale et renvoie0
.
Notes sur l’utilisation¶
Le temps d’exécution de la fonction EDITDISTANCE est proportionnel au produit des longueurs des chaînes d’entrée.
Pour de meilleures performances, Snowflake recommande d’utiliser des chaînes d’entrée ne dépassant pas 4 096 caractères.
Vous pouvez également utiliser l’argument facultatif
max_distance
pour fixer une limite supérieure à la distance calculée.
Détails du classement¶
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.
Le résultat repose uniquement sur les caractères des chaînes, et non sur les spécifications de classement des chaînes.
Exemples¶
L’exemple suivant calcule la distance entre les chaînes des colonnes s
et t
de la table ed
.
Les deux dernières colonnes utilisent l’argument max_distance
pour spécifier la distance maximale à calculer :
Lorsque
max_distance
est3
, la fonction renvoie3
si la distance entre les chaînes est supérieure ou égale à 3 (comme indiqué ci-dessous).Si
max_distance
est un nombre négatif (par exemple-1
, comme indiqué ci-dessous), la fonction utilise0
comme distance maximale et renvoie0
.
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] |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
L’exemple suivant renvoie FALSE
si la distance entre deux chaînes est au moins 2. Comme max_distance
est spécifié comme 2
, la fonction arrête de calculer la distance une fois qu’il est déterminé que la distance est au moins 2. (La distance réelle entre les chaînes d’entrée est 6.)
SELECT EDITDISTANCE('future', 'past', 2) < 2;
+---------------------------------------+
| EDITDISTANCE('FUTURE', 'PAST', 2) < 2 |
|---------------------------------------|
| False |
+---------------------------------------+