MySQLで誤入力(タイポ)を許容して文字列を検索する方法|SOUNDS LIKE演算子の使い方
ユーザーが誤って「deom」(正しくは「demo」)や「samsumg」(正しくは「samsung」)のように入力してしまった場合でも、目的の文字列を検索できると便利です。MySQLでは、SOUNDS LIKE 演算子を使うことで、このようなスペルの揺れ(タイポ)を許容したあいまい検索が可能になります。
サンプルテーブルの作成
まず、検索対象となるテーブルを作成します。
mysql> create table DemoTable
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.95 sec)レコードの挿入
INSERTコマンドを使って、いくつかのレコードをテーブルに登録します。あえて似た綴りのデータ(「Johm」「SAMSUMG」など)も含めておきます。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable values('Johm');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('SAMSUNG');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('SAMSUMG');
Query OK, 1 row affected (0.13 sec)テーブル内の全レコードを確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、次のような結果が出力されます。
+---------+ | Name | +---------+ | John | | Adam | | Johm | | Carol | | SAMSUNG | | SAMSUMG | +---------+ 6 rows in set (0.00 sec)
SOUNDS LIKEを使ったあいまい検索クエリ
ここからが本題です。「samsung」を「samsumg」と誤って入力したケースを想定し、SOUNDS LIKE演算子を使って検索します。
mysql> select *from DemoTable where Name SOUNDS LIKE 'samsung';
実行結果は以下の通りです。
+---------+ | Name | +---------+ | SAMSUNG | | SAMSUMG | +---------+ 2 rows in set (0.00 sec)
SOUNDS LIKEの仕組みと注意点
SOUNDS LIKEは、内部でSOUNDEX()関数を利用しています。SOUNDEXは文字列を「発音の似たグループ」に分類するアルゴリズムで、これにより「SAMSUNG」と「SAMSUMG」のように発音が近い単語を同一視できます。
ただし、SOUNDEXは英語の発音を前提として設計されているため、日本語などのマルチバイト文字列には適していません。また、発音が大きく異なる誤字(例:全く別の子音を持つケース)は検出できない場合があります。用途に応じて、LIKE句との併用や全文検索インデックス(FULLTEXT)との使い分けも検討するとよいでしょう。
-
MySQLで末尾の文字列に基づいてレコードをソートする方法
MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC
-
MySQLデータベースで文字列を高速に検索するには?FULLTEXT検索の使い方を徹底解説
MySQLデータベース内の文字列を素早く検索したい場合、FULLTEXT(全文検索)インデックスを利用するのが最も効果的です。LIKE句による部分一致検索はレコード数が増えるほどパフォーマンスが低下しますが、FULLTEXTインデックスを作成しておけば、大量のデータからでも目的の文字列を高速に抽出できます。1. テーブルを作成するまず、検索対象となるテーブルを作成しましょう。ここでは「Title」というテキスト型カラムを持つシンプルなテーブルを用意します。mysql> create table DemoTable1554 -> ( -> Title text