使用MySQL将LIKE与Stored Procedures参数连接

时间:2013-09-18 13:12:16

标签: mysql sql stored-procedures

目标

使用MySQL将参数与LIKE的%运算符连接。

问题

我的数据库上有以下查询,它可以很好地返回结果:

SELECT people.LOGIN, people.EMAIL FROM people
WHERE people.LOGIN LIKE 'o%'
ORDER BY people.LOGIN ASC
LIMIT 10;

但是我想使用存储过程调用此函数,而不是使用'o%',我想使用'<myvariable>%'而我无法做到这一点。

场景

我在我的程序中尝试了以下内容:

BEGIN
    SELECT people.EMAIL FROM people
    WHERE people.LOGIN LIKE CONCAT(expression, '%')
    ORDER BY people.LOGIN ASC
    LIMIT 10;
END

结果呢? 清空。此查询不返回任何内容。

有人有任何想法可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

实际传入的内容通常不是我们的想法。

检查参数:

  • 不为空
  • 没有前导或尾随空格

试着这样做以防范上述情况:

WHERE people.LOGIN LIKE CONCAT(TRIM(IFNULL(expression, '')), '%')

答案 1 :(得分:1)

您需要使用prepared statements

使用查询创建一个字符串,并使用预准备语句执行它。像这样的东西 -

SET @query = CONCAT('SELECT * FROM table1 WHERE column1 LIKE ''', expression, '%''');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

答案 2 :(得分:0)

您可以使用LOCATE。例如:

WHERE LOCATE(pParamText,column1)&gt; 0