我试图设置一些简单的SQL脚本来帮助一些短期的数据库管理。因此,我设置变量来尝试使重用这些脚本更容易。
我遇到的问题特别是LIKE子句。
SET @email = 'test@test.com';
SELECT email from `user` WHERE email LIKE '%@email%';
所以我想让它根据变量中设置的电子邮件来查找结果。如果我手动将电子邮件输入到LIKE子句中,查询就可以工作。
如何让LIKE子句与用户变量一起使用?
更新:@dems的答案适用于这个简单的情况,但是我在处理更复杂的查询时遇到了麻烦。
SET @email = 'test@test.com';
SELECT project.projectno, project.projectname, login.username,
CONCAT(login.firstname, ' ', login.lastname), projectuser.title
FROM projectuser
INNER JOIN login ON projectuser.uid = login.uid
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE CONCAT ('%', @email, '%')
返回错误“函数mydb.CONCAT不存在”
该查询不使用CONCAT():
SET @email = 'test@test.com';
SELECT project.projectno, project.projectname, login.username,
CONCAT(login.firstname, ' ', login.lastname), projectuser.title
FROM projectuser
INNER JOIN login ON projectuser.uid = login.uid
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE @email
7条答案
按热度按时间klsxnrf11#
odopli942#
您可能有错误
在这种情况下,您需要指定与表中使用的排序规则相同的排序规则,如下所示:
vhipe2zx3#
我在使用LIKE语句之前使用CONCAT函数解决了这个问题:
对我来说很好用
9jyewag04#
vnjpjtjt5#
Jan '22我在使用LIKE命令时遇到了一个问题。通过回显变量值和SQL语句,我发现引号函数在变量周围打了勾。获取业务类型的代码:
$businesstype的回显:理发师
SQL回显:选择业务名称、会员编号、街道、城市FROM成员WHERE verified = TRUE AND业务类型LIKE 'Barber'按功能级别描述、会员资格日期描述、业务名称排序
由于搜索值已经用单引号括起来了,所以要使用LIKE,我必须在第一个勾号之后和最后一个勾号之前获得%。我使用了字符串替换函数和concat操作符的组合:将原来的单引号替换为空,并将搜索值前后的“%”和“%”串联起来。
。对我很有效。我希望它能对某人有所帮助。如果我正在以某种方式取消SQL注入保护,请让我知道。
wljmcqd86#
使用与oracle相同的语法似乎可以工作:
第一个月
lndjwyie7#
无需CONCAT,只需使用“%”+变量+“%”: