たとえば「ジョニー・デップ」で「ジョ・ニーデップ 」までヒットして良いかという問題です。
問題ないならreplaceを利用して「ジョニーデップ 」に加工した後、
ヒットさせればよいですが、インデックスなど効かないのであまり
効率的な検索にはなりません。
追記
SQL
1create table tb_actor(no int unique,name varchar(30));
2
3insert into tb_actor values
4(1,'ジョニー・デップ'),
5(2,'ジョニーデップ'),
6(3,'ジョニー/デップ'),
7(4,'ジョ#ニーデップ'),
8(5,'ジ__・--ョ$ニ#$$ー_デ-ッ******プ'),
9(6,'ジョ・ニーデップ'),
10(11,'オーランド・ブルーム'),
11(21,'ハリー・ポッター');
12
として、「・#_-$*」を除く場合こんな感じ
select no
,name from tb_actor
where
replace(
replace(
replace(
replace(
replace(
replace(name,'・','')
,'$','')
,'#','')
,'_','')
,'-','')
,'*','') like '%ジョニーデップ%'
function
汎用性のためfunctionを使います
まずストアードファンクション(replace2)を作成します
sql
1drop function if exists replace2;
2delimiter //
3create function replace2(str varchar(255), pattern varchar(20), replacement varchar(20)) returns varchar(255) DETERMINISTIC
4begin
5DECLARE x INT DEFAULT 0;
6DECLARE i INT DEFAULT 1;
7set x=length(pattern);
8while i<=x
9do
10set str=replace(str,substr(pattern,i,1),replacement);
11set i=i+1;
12end while;
13return str;
14end
15//
16delimiter ;
17
functionを利用した実行
sql
1select no
2,name from tb_actor
3where replace2(name,'・$#_-*','') like '%ジョニーデップ%';
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 07:05
2017/04/25 08:00 編集
2017/04/25 08:34
2017/04/25 13:39