- 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_expr2
Die Eingabezeichenfolgen.
Optional:
max_distance
Ganzzahliger 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 Funktion0
als maximale Distanz und gibt0
zurü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.
Sie können auch das optionale Argument
max_distance
verwenden, 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_distance
den Wert3
hat, gibt die Funktion3
zurück, wenn die Distanz zwischen den Zeichenfolgen größer oder gleich 3 ist (wie unten gezeigt).Wenn
max_distance
eine negative Zahl ist (z. B.-1
, wie unten gezeigt), verwendet die Funktion0
als maximale Distanz und gibt0
zurü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 |
+---------------------------------------+