メインコンテンツまでスキップ
に最終更新

LEVENSHTEIN

説明​

LEVENSHTEIN 関数は、二つの文字列間のレーベンシュタイン編集距離を計算します。

レーベンシュタイン編集距離とは、一方の文字列をもう一方の文字列に変換するために必要な、一文字単位の編集操作の最小回数です。次の編集操作に対応しています。

  • 文字の挿入
  • 文字の削除
  • 文字の置換

この関数はバイト単位ではなく、UTF-8 文字単位で距離を計算します。そのため、中国語の漢字などのマルチバイト文字も一文字として扱います。

注記

4.2.0 以降

エイリアス​

  • LEVENSHTEIN_DISTANCE
  • EDIT_DISTANCE

構文​

LEVENSHTEIN(<str1>, <str2>)
LEVENSHTEIN_DISTANCE(<str1>, <str2>)
EDIT_DISTANCE(<str1>, <str2>)

パラメータ​

パラメータ説明
<str1>最初の文字列。型: VARCHAR
<str2>二番目の文字列。型: VARCHAR

戻り値​

二つの文字列間のレーベンシュタイン編集距離を表す INT 値を返します。

特殊なケース:

  • いずれかの引数が NULL の場合は、NULL を返します。
  • 両方の文字列が同一の場合は、0 を返します。
  • 一方の文字列が空の場合は、もう一方の文字列の文字数を返します。
  • この関数は対称的です。つまり、LEVENSHTEIN(a, b) と LEVENSHTEIN(b, a) は同じ結果を返します。

例​

  1. 基本的な使い方
SELECT levenshtein('kitten', 'sitting');
+----------------------------------+
| levenshtein('kitten', 'sitting') |
+----------------------------------+
| 3 |
+----------------------------------+

kitten は sitting に 3 回の編集操作で変換できます。k を s に置換し、e を i に置換して、末尾に g を挿入します。

  1. 同一の文字列
SELECT levenshtein('abc', 'abc');
+---------------------------+
| levenshtein('abc', 'abc') |
+---------------------------+
| 0 |
+---------------------------+
  1. 空文字列
SELECT levenshtein('', 'abc'), levenshtein('数据库', '');
+------------------------+------------------------------+
| levenshtein('', 'abc') | levenshtein('数据库', '') |
+------------------------+------------------------------+
| 3 | 3 |
+------------------------+------------------------------+
  1. UTF-8 文字
SELECT levenshtein('你好世界', '你好世间');
+---------------------------------------------+
| levenshtein('你好世界', '你好世间') |
+---------------------------------------------+
| 1 |
+---------------------------------------------+

界 を 间 に置換するには、1 回の編集操作が必要です。

  1. 隣接する文字の入れ替えは二回の編集操作として数える
SELECT levenshtein('abcd', 'abdc');
+-----------------------------+
| levenshtein('abcd', 'abdc') |
+-----------------------------+
| 2 |
+-----------------------------+

レーベンシュタイン距離では、隣接する文字の入れ替えを一回の操作として扱わないため、abcd と abdc の距離は 2 です。

  1. エイリアスの使用
SELECT levenshtein_distance('abcd', 'abdc'), edit_distance('kitten', 'sitting');
+--------------------------------------+------------------------------------+
| levenshtein_distance('abcd', 'abdc') | edit_distance('kitten', 'sitting') |
+--------------------------------------+------------------------------------+
| 2 | 3 |
+--------------------------------------+------------------------------------+
  1. NULL 引数
SELECT levenshtein(NULL, 'abc'), levenshtein('abc', NULL);
+--------------------------+--------------------------+
| levenshtein(NULL, 'abc') | levenshtein('abc', NULL) |
+--------------------------+--------------------------+
| NULL | NULL |
+--------------------------+--------------------------+