我想知道是否有更好的方法:
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('p%a_t*er?', '\\', '\\\\'), '%', '\%'), '_', '\_'), '*', '%'), '?', '_')
将标准搜索模式*
和?
转换为MySQL中的LIKE等效项%
和_
?
答案 0 :(得分:1)
在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 :(得分:0)
而不是like
你可以像这样使用regexp的Mysql:
select * from my_table where col_name regexp 'p%a_t*er?';
使用正则表达式时,无需进行所有替换即可使字符串like
友好。