sql >> データベース >  >> RDS >> MariaDB

MariaDBでのSOUNDEX()のしくみ

    MariaDBでは、SOUNDEX() は、指定された文字列からSoundex文字列を返す組み込みの文字列関数です。

    Soundexは、英語で発音されるように、音で名前にインデックスを付けるための音声アルゴリズムです。 2つの単語が同じように聞こえる場合は、同じSoundex文字列を使用する必要があります。 2つの単語が似ているように聞こえるが、まったく同じではない場合、それらのSoundex文字列は似ているように見えますが、まったく同じではない可能性があります。

    この関数は、Soundex文字列を返す文字列という1つの引数を受け入れます。

    構文

    構文は次のようになります:

    SOUNDEX(str)

    str Soundex文字列を返す文字列です。

    基本的な例は次のとおりです。

    SELECT SOUNDEX('Bat');

    結果:

    +----------------+
    | SOUNDEX('Bat') |
    +----------------+
    | B300           |
    +----------------+

    似ているが異なる発音の単語から返されたSoundex文字列を比較する別の例を次に示します。

    SELECT 
        SOUNDEX('Bat'),
        SOUNDEX('Cat'),
        SOUNDEX('Cap');

    結果:

    +----------------+----------------+----------------+
    | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') |
    +----------------+----------------+----------------+
    | B300           | C300           | C100           |
    +----------------+----------------+----------------+

    そして、これは同じように聞こえない単語を比較するものです:

    SELECT 
        SOUNDEX('Apartment'),
        SOUNDEX('Vehicle'),
        SOUNDEX('Groceries');

    結果:

    +----------------------+--------------------+----------------------+
    | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') |
    +----------------------+--------------------+----------------------+
    | A16353               | V240               | G6262                |
    +----------------------+--------------------+----------------------+

    この関数は、最初に母音を破棄し、次に複製する元のSoundexアルゴリズムを実装していることに注意してください。これは、最初に重複を破棄し、次に母音を破棄する拡張バージョンとは対照的です。

    また、標準のSoundex文字列は4文字の長さですが、MariaDBのSOUNDEX() 関数は任意の長さの文字列を返します。したがって、上記の結果には非標準のSoundex文字列が含まれます。

    私が何を意味するかを説明するために、OracleのSOUNDEX()を使用したときに得られる結果を次に示します。 同じことをする関数:

    SELECT 
        SOUNDEX('Apartment'),
        SOUNDEX('Vehicle'),
        SOUNDEX('Groceries')
    FROM DUAL;

    結果:

       SOUNDEX('APARTMENT')    SOUNDEX('VEHICLE')    SOUNDEX('GROCERIES') 
    _______________________ _____________________ _______________________ 
    A163                    V240                  G626                   

    完全一致

    異なる単語であり、意味が異なるにもかかわらず、Soundex文字列が一致する単語のペアの例を次に示します。

    SELECT 
        SOUNDEX('Dam') AS Dam, 
        SOUNDEX('Damn') AS Damn, 
        SOUNDEX('Too') AS Too, 
        SOUNDEX('Two') AS Two;

    結果:

    +------+------+------+------+
    | Dam  | Damn | Too  | Two  |
    +------+------+------+------+
    | D500 | D500 | T000 | T000 |
    +------+------+------+------+

    データベースの例

    データベースクエリからSoundex文字列を取得する例を次に示します。

    SELECT 
        PetName, 
        SOUNDEX(PetName)
    FROM Pets;

    結果:

    +---------+------------------+
    | PetName | SOUNDEX(PetName) |
    +---------+------------------+
    | Fluffy  | F410             |
    | Fetch   | F320             |
    | Scratch | S632             |
    | Wag     | W200             |
    | Tweet   | T000             |
    | Fluffy  | F410             |
    | Bark    | B620             |
    | Meow    | M000             |
    +---------+------------------+

    SOUNDEX()を使用することもできます WHERE 指定された単語のように聞こえる行のみを返す句:

    SELECT 
        PetName, 
        SOUNDEX(PetName),
        SOUNDEX('Wagg')
    FROM Pets
    WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');

    結果:

    +---------+------------------+-----------------+
    | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') |
    +---------+------------------+-----------------+
    | Wag     | W200             | W200            |
    +---------+------------------+-----------------+

    ただし、SOUNDS LIKEを使用することをお勧めします 代わりに、これは同じことを行うためのより簡潔な方法です。

    空の文字列

    指定された引数ごとに空の文字列が渡されると、次のようになります。

    SELECT SOUNDEX('');

    結果:

    +-------------+
    | SOUNDEX('') |
    +-------------+
    |             |
    +-------------+

    ヌル引数

    nullを渡す nullを返します :

    SELECT SOUNDEX(null);

    結果:

    +---------------+
    | SOUNDEX(null) |
    +---------------+
    | NULL          |
    +---------------+

    引数がありません

    SOUNDEX()の呼び出し 引数の数が間違っているか、引数を渡さないと、エラーが発生します:

    SELECT SOUNDEX();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'

    1. 実際のMySQLクエリ時間の測定

    2. SQLiteデータベースのビューを一覧表示する4つの方法

    3. ORACLE-ORA-01843:有効な月ではありません

    4. SQLServerの一時テーブルの概要