カテゴリ:

文字列とバイナリ関数

SOUNDEX

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

この関数を使用して、2つの文字列(例: 姓 LevineLavine、単語 totoo)が英語による発音で似ているかどうかを判断できます。

この関数では、 Soundexシステム で説明されている Soundex音声アルゴリズム を使用します。ただし、Snowflakeは姓のプレフィックスに対して特別な処理を提供しないことに注意してください(例:「Van」「De」「La」など)。

SOUNDEX('Pfister') は、 P236 を返します。最初の2文字(Pf)は隣接しており、同じSoundexコード番号(1)を共有しているため、関数は2文字目のSoundexコード番号を無視します。

一部のデータベースシステム(例: Teradata)では、1文字目と2文字目が同じ番号を使用している場合に、2文字目のSoundexコード番号を保持するバリアントを使用します。そのバリアントでは、 Pfister の文字列は P123 です(P236 ではない)。そのバリアントを使用するには、代わりに SOUNDEX_P123 関数を呼び出します。

こちらもご参照ください。

SOUNDEX_P123

構文

SOUNDEX( <varchar_expr> )
Copy

引数

varchar_expr

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

戻り値

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

次の点に注意してください。

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

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

  • 前述のように、1文字目と2文字目が同じ番号を使用しているときに、2文字目のSoundexコード番号を保持するバリアントを使用する場合は、代わりに SOUNDEX_P123 関数を呼び出します。

使用上の注意

  • 関数は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                                     |
    +----------------------------------------+--------------------------+------------------------------------------+
    
    Copy

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

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

次のクエリは、 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');
Copy

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

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

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

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