- Kategorien:
Zeichenfolgen- und Binärfunktionen (Abgleich/Vergleich)
EDITDISTANCE¶
Berechnet die Levenshtein-Distanz zwischen zwei Eingabezeichenfolgen. Das ist die Anzahl der Einfügungen, Löschungen oder Ersetzungen einzelner Zeichen, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln.
Bemerkung
Im Gegensatz zu anderen Kennzahlen (z. B. Damerau-Levenshtein-Distanz) werden Zeichenumkehrungen nicht berücksichtigt.
Syntax¶
EDITDISTANCE( <string_expr1> , <string_expr2> [ , <max_distance> ] )
Argumente¶
Erforderlich:
string_expr1, .string_expr2Die Eingabezeichenfolgen.
Optional:
max_distanceGanzzahliger Ausdruck, der die zu berechnende maximale Distanz angibt.
Wenn die Distanz zwischen den Zeichenfolgen diesen Wert überschreitet, beendet die Funktion die Berechnung der Distanz und gibt nur die maximale Distanz zurück.
Die Angabe dieses Arguments hat die gleiche Wirkung wie der Aufruf von
LEAST( EDITDISTANCE( string_expr1, string_expr2 ), max_distance ).Wenn Sie eine negative Zahl angeben (d. h.
-n), verwendet die Funktion0als maximale Distanz und gibt0zurück.
Nutzungshinweise¶
Die Ausführungszeit der Funktion EDITDISTANCE ist proportional zum Produkt der Länge der Eingabezeichenfolgen.
Für eine bessere Leistung empfiehlt Snowflake die Verwendung von Eingabezeichenfolgen, die nicht länger als 4.096 Zeichen sind.
Eingaben von Zeichenfolgen, die länger als 128 MB sind, können zu einem Fehler führen.
Sie können auch das optionale Argument
max_distanceverwenden, um eine Obergrenze für die berechnete Distanz festzulegen.
Sortierungsdetails¶
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.
Das Ergebnis basiert ausschließlich auf den Zeichen in den Zeichenfolgen, nicht auf den Sortierungsspezifikationen der Zeichenfolgen.
Beispiele¶
Im folgenden Beispiel wird die Distanz zwischen den Zeichenfolgen in den Spalten s und t der Tabelle ed berechnet.
In den letzten beiden Spalten wird mit dem Argument max_distance die maximale Distanz angegeben, die berechnet werden soll:
Wenn
max_distanceden Wert3hat, gibt die Funktion3zurück, wenn die Distanz zwischen den Zeichenfolgen größer oder gleich 3 ist (wie unten gezeigt).Wenn
max_distanceeine negative Zahl ist (z. B.-1, wie unten gezeigt), verwendet die Funktion0als maximale Entfernung und gibt0zurück.
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] |
+----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
Das nächste Beispiel gibt FALSE zurück, wenn die Distanz zwischen zwei Zeichenfolgen mindestens 2 beträgt. Da für max_distance der Wert 2 angegeben ist, beendet die Funktion die Berechnung der Distanz, sobald die Distanz mindestens 2 beträgt. (Die tatsächliche Distanz zwischen den Eingabezeichenfolgen ist 6.)
SELECT EDITDISTANCE('future', 'past', 2) < 2;
+---------------------------------------+
| EDITDISTANCE('FUTURE', 'PAST', 2) < 2 |
|---------------------------------------|
| False |
+---------------------------------------+