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, Damerau-Levenshtein), les transpositions de caractères ne sont pas prises en compte.

Syntaxe

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

Arguments

Obligatoire :

chaine_expr1, . chaine_expr2

Les chaînes d’entrée.

Facultatif :

distance_max

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( chaine_expr1, chaine_expr2 ), distance_max ).

Si vous spécifiez un nombre négatif (c’est-à-dire -n), la fonction utilise 0 comme distance maximale et renvoie 0.

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 distance_max 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 distance_max pour spécifier la distance maximale à calculer :

  • Lorsque distance_max est 3, la fonction renvoie 3 si la distance entre les chaînes est supérieure ou égale à 3 (comme indiqué ci-dessous).

  • Si distance_max est un nombre négatif (par exemple -1, comme indiqué ci-dessous), la fonction utilise 0 comme distance maximale et renvoie 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]                 |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+

L’exemple suivant renvoie FALSE si la distance entre deux chaînes est au moins 2. Comme distance_max 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                                 |
+---------------------------------------+