カテゴリ:

文字列とバイナリ関数 (マッチング/比較)

EDITDISTANCE

2つの入力文字列間のレーベンシュタイン距離を計算します。これは、ある文字列を別の文字列に変換するために必要な単一文字の挿入、削除、または置換の数です。

注釈

その他のメトリックスのいくつか(例: ダメラウ・レーベンシュタイン距離)とは異なり、文字の転置は考慮されません。

構文

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

引数

必須:

string_expr1. string_expr2

入力文字列。

オプション:

max_distance

計算する最大距離を指定する整数式。

文字列間の距離がこの数を超えると、関数は距離の計算を停止し、最大距離を返すだけです。

この引数を指定すると、 LEAST( EDITDISTANCE( string_expr1, string_expr2 ), max_distance ) を呼び出すのと同じ効果があります。

負の数(つまり、 -n)を指定すると、関数は最大距離として 0 を使用し、 0 を返します。

使用上の注意

  • EDITDISTANCE 関数の実行時間は、入力文字列の長さの積に比例します。

  • パフォーマンスを向上させるために、Snowflakeでは4096文字以下の入力文字列を使用することをお勧めします。

    オプションの max_distance 引数を使用して、計算する距離の上限を設定することもできます。

照合の詳細

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.

結果は、文字列の照合仕様ではなく、文字列内の文字のみに基づいています。

次の例では、テーブル ed にある列 st の文字列間の距離を計算します。

最後の2つの列は、 max_distance 引数を使用して、計算する最大距離を指定します。

  • max_distance3 の場合、文字列間の距離が3以上であれば、関数は 3 を返します(以下を参照)。

  • max_distance が負の数の場合(例: 以下に示すように -1)、関数は最大距離として 0 を使用し、 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]                 |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
Copy

次の例では、2つの文字列間の距離が少なくとも2の場合、 FALSE を返します。 max_distance2 に指定されているため、距離が少なくとも2であると判断されると、関数は距離の計算を停止します。(入力文字列間の実際の距離は6。)

SELECT EDITDISTANCE('future', 'past', 2) < 2;

+---------------------------------------+
| EDITDISTANCE('FUTURE', 'PAST', 2) < 2 |
|---------------------------------------|
| False                                 |
+---------------------------------------+
Copy