Kategorien:

Zeichenfolgen- und Binärfunktionen (Abgleich/Vergleich)

EDITDISTANCE

Berechnet den Levenshtein-Abstand 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 Metriken (z. B. Damerau-Levenshtein-Abstand) werden Zeichenumkehrungen nicht berücksichtigt.

Syntax

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

Argumente

Erforderlich:

Zeichenfolgenausdruck1, . Zeichenfolgenausdruck2

Die Eingabezeichenfolgen.

Optional:

max_Distanz

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( Zeichenfolgeausdruck1, Zeichenfolgeausdruck2 ), max_Distanz ).

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_Distanz 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_Distanz die maximale Distanz angegeben, die berechnet werden soll:

  • Wenn max_Distanz 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_Distanz 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]                 |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+

Das nächste Beispiel gibt FALSE zurück, wenn die Distanz zwischen zwei Zeichenfolgen mindestens 2 beträgt. Da für max_Distanz 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                                 |
+---------------------------------------+