文字列にフィールド値が部分文字列として含まれているかどうかを確認したい。
select * from mytable where instr("mystring", column_name);
ただし、これは単語の境界を検索しません。
select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');
どちらも機能しません。これを修正するには?
文字列にフィールド値が部分文字列として含まれているかどうかを確認したい。
select * from mytable where instr("mystring", column_name);
ただし、これは単語の境界を検索しません。
select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');
どちらも機能しません。これを修正するには?
REGEXP
これは、演算子を使用して行うことができます。
SELECT * FROM mytable WHERE 'mystring' REGEXP CONCAT('[[:<:]]', column_name, '[[:>:]]');
ただし、これは遅いことに注意してください。単語が気になる場合は、MySQL のFULLTEXT
検索機能を使用することをお勧めします。または、通常のInStr()
チェックを行ってから結果をフィルタリングします。
代わりにinstr
使用の戻り値が必要ない場合like
select * from mytable where column_name like '%mystring%';
昨日の質問ですでに説明したように、インデックスを使用できず、パフォーマンスが低下しますが、これは機能する可能性があります。
select *
from mytable
where 'mystring' = column_name -- exact match
or 'mystring' like concat('% ', column_name) -- word at the end
or 'mystring' like concat(column_name, ' %') -- word at beginning
or 'mystring' like concat('% ', column_name, ' %') -- word in the middle