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'