私はより良い方法があるかどうか知りたいです:
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('p%a_t*er?', '\\', '\\\\'), '%', '\%'), '_', '\_'), '*', '%'), '?', '_')
標準の検索パターン*
を?
LIKEの同等のもの%
に、そして_
MySQLで変換するには?
MySQL で複数文字の置換を直接実行する、より短い方法はありません。ユーザー定義関数 (UDF) などの代替手段がありますが、正確な目的に役立つものがあるとは思えません。
可能であれば、データベースにクエリを実行する前にテキスト置換を実行することをお勧めします。
PHP では、これは次のように行うことができます。
$searchQuery = $_GET['q'];
$searchQuery = str_replace(array('*', '?'), array('%', '_'), $searchQuery);
// perform your query as normal
ASP では、次のことを試すことができます。
string searchQuery = Request.QueryString["q"];
searchQuery = searchQuery.Replace("*", "%").Replace("?", "_");
// perform your query as normal
ただし、どちらの方法も非常に短いわけではありませんが、読みやすくなり、db-query に時間を追加することもありません。また、クエリの前に置換を行うと、文字列がサニタイズされる前に置換できるため、既存のクエリで行うように置換する必要がなくなり\
ます。これにより、置換が 1 つ節約されます。
代わりに、Mysql の正規表現like
を次のように使用できます。
select * from my_table where col_name regexp 'p%a_t*er?';
正規表現を使用している間は、文字列を使いやすくするためにこれらすべての置換を行う必要はありませんlike
。