3

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

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

将标准搜索模式转换为 LIKE 等价物并*在MySQL 中??%_

4

2 回答 2

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

虽然,这两种方法都不是超短的,但它们确实使它更容易阅读,也不会为您的数据库查询增加任何时间。此外,在查询之前进行替换将允许您在清理字符串之前进行替换,因此您不需要\像在现有查询中那样替换 - 这样可以节省一次替换!

于 2012-10-31T12:30:54.337 回答
0

而不是like你可以像这样使用Mysql的正则表达式

select * from my_table where col_name regexp 'p%a_t*er?';

使用正则表达式时,无需进行所有这些替换以使您的字符串like友好。

于 2012-10-31T10:37:36.747 回答