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> ] )
Copy

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 Funktion 0 als maximale Distanz und gibt 0 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 Wert 3 hat, gibt die Funktion 3 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 Funktion 0 als maximale Distanz und gibt 0 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]                 |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
Copy

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                                 |
+---------------------------------------+
Copy