ここは素直に
sql
1SELECT * FROM `test` WHERE `name` LIKE '%斉藤%' or `name` LIKE '%齊藤%' or ...;
と記述する方が良いと、私は考えます。
Kosuke_Shibuya様の回答のように、正規表現を使うと以下のように記述できますが、
sql
1SELECT * FROM test WHERE name REGEXP ('[斉齊齋斎]藤');
MySQLのマニュアルには、以下のように説明されているからです。
https://dev.mysql.com/doc/refman/5.6/ja/regexp.html#operator_regexp
警告
REGEXP および RLIKE 演算子はバイト単位で機能するため、マルチバイトセーフではなく、マルチバイト文字セットを使用すると想定外の結果が生成される可能性があります。
実際、上述の正規表現では意図通りに動作しないケースがあります。
(以下、MySQL5.7で確認)
sql
1mysql> CREATE TABLE test (
2 -> name varchar(32) DEFAULT NULL
3 -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4Query OK, 0 rows affected (0.03 sec)
5
6mysql> INSERT INTO test VALUES ('キヤノン'), ('キャノン');
7Query OK, 2 rows affected (0.01 sec)
8Records: 2 Duplicates: 0 Warnings: 0
9
10
11mysql> SELECT * FROM test;
12+--------------+
13| name |
14+--------------+
15| キヤノン |
16| キャノン |
17+--------------+
182 rows in set (0.00 sec)
19
20
21mysql> SELECT * FROM test WHERE name REGEXP('キ[ヤャ]ノン');
22Empty set (0.00 sec)
一応、このケースでも以下のように正規表現を書き換えると意図通りに動作しましたが、
こちらも意図通りに動作しないケースが無いとも言えません。
sql
1mysql> SELECT * FROM test WHERE name REGEXP ('キ(ヤ|ャ)ノン');
2+--------------+
3| name |
4+--------------+
5| キヤノン |
6| キャノン |
7+--------------+
82 rows in set (0.00 sec)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。