カテゴリ:

文字列とバイナリ関数

SOUNDEX

入力文字列の音声表現を含む文字列を返します。

この関数は通常、姓 LevineLavine などの2つの文字列、または単語 totoo が類似した英語の発音を持つかどうかを判断するのに役立ちます。

構文

SOUNDEX( <varchar_expr> )

引数

varchar式

発音の表現が返される文字列です。文字列には、ラテン文字またはユニコード文字セットを使用する必要があります。

戻り値

返される値は、入力文字列の音声表現を含む VARCHAR です。つまり、戻り値は、入力文字列のスペルではなく、発音を表す文字列(サウンドではない)です。

返される値は、文字列の最初の文字を表す文字で始まり、その後に3桁が続きます(例: s400c130)。

戻り値の計算方法の詳細については、 Soundex音声アルゴリズム (Wikipedia)をご参照ください。

使用上の注意

  • 関数は4文字(1文字と3桁)しか返さないため、出力は主に文字列全体ではなく、入力の最初の数音節によって決定されます。

    例えば、次のステートメントは3つの文字列を比較し、各文字列に対して同じ SOUNDEX 値を返します。スペルと意味が完全に異なっていても、音韻的に類似した音節で始まるためです。

    SELECT SOUNDEX('I love rock and roll music.'),
           SOUNDEX('I love rocks and gemstones.'),
           SOUNDEX('I leave a rock wherever I go.');
    +----------------------------------------+--------------------------+------------------------------------------+
    | SOUNDEX('I LOVE ROCK AND ROLL MUSIC.') | SOUNDEX('I LOVE ROCKS.') | SOUNDEX('I LEAVE A ROCK WHEREVER I GO.') |
    |----------------------------------------+--------------------------+------------------------------------------|
    | I416                                   | I416                     | I416                                     |
    +----------------------------------------+--------------------------+------------------------------------------+
    

次のクエリは、スペルが異なる2つの名前に対して SOUNDEX 値を返しますが、通常は同じように発音されます。

SELECT SOUNDEX('Marks'), SOUNDEX('Marx');
+------------------+-----------------+
| SOUNDEX('MARKS') | SOUNDEX('MARX') |
|------------------+-----------------|
| M620             | M620            |
+------------------+-----------------+

次のクエリは、 SOUNDEX を使用して、異なるテーブルで潜在的に関連する行を見つける方法を示しています。

テーブルを作成してロードします。

CREATE TABLE sounding_board (v VARCHAR);
CREATE TABLE sounding_bored (v VARCHAR);
INSERT INTO sounding_board (v) VALUES ('Marsha');
INSERT INTO sounding_bored (v) VALUES ('Marcia');

SOUNDEXのない関連レコードを探します。

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE bored.v = board.v;
+---+---+
| V | V |
|---+---|
+---+---+

SOUNDEXを使用して関連レコードを探します。

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE SOUNDEX(bored.v) = SOUNDEX(board.v);
+--------+--------+
| V      | V      |
|--------+--------|
| Marsha | Marcia |
+--------+--------+