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'