0

文字列にフィールド値が部分文字列として含まれているかどうかを確認したい。

select * from mytable where instr("mystring", column_name);

ただし、これは単語の境界を検索しません。

select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');

どちらも機能しません。これを修正するには?

4

3 に答える 3

2

REGEXPこれは、演算子を使用して行うことができます。

SELECT * FROM mytable WHERE 'mystring' REGEXP CONCAT('[[:<:]]', column_name, '[[:>:]]');

ただし、これは遅いことに注意してください。単語が気になる場合は、MySQL のFULLTEXT検索機能を使用することをお勧めします。または、通常のInStr()チェックを行ってから結果をフィルタリングします。

于 2010-01-24T11:11:41.717 に答える
0

代わりにinstr使用の戻り値が必要ない場合like

select * from mytable where column_name like '%mystring%';
于 2010-01-24T11:08:28.950 に答える
0

昨日の質問ですでに説明したように、インデックスを使用できず、パフォーマンスが低下しますが、これは機能する可能性があります。

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
于 2010-01-24T11:13:47.050 に答える