将标准简化模式(*?)转换为LIKE模式(%_)

时间:2012-10-31 10:30:04

标签: mysql sql-like

我想知道是否有更好的方法:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('p%a_t*er?', '\\', '\\\\'), '%', '\%'), '_', '\_'), '*', '%'), '?', '_')

将标准搜索模式*?转换为MySQL中的LIKE等效项%_

2 个答案:

答案 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友好。