使用 SQL LIKE 运算符作为存储过程参数
Using SQL LIKE operator like a Stored Procedure paramater
我正在尝试在存储过程中使用 LIKE %...% 但我不确定如何在运算符中使用传入变量。例如,我这样做:
DELIMITER //
CREATE PROCEDURE GetGameByName(IN gameName varchar(255))
BEGIN
SELECT *
FROM game
WHERE gameTitle LIKE '% + gameName + %';
END //
DELIMITER ;
但是当我这样称呼它时
CALL GetGameByName('Creed');
它没有返回任何内容(我有一个带有 gameTitle "Assassin's Creed"
的游戏
知道我做错了什么吗?谢谢
由于评论中的问题已更新 - 现在的解决方案是 WHERE gameTitle LIKE CONCAT('%',gameName,'%')
===== 上一个回答 =====
在我看来你好像忘记了引号。而不是 WHERE gameTitle LIKE '% + gameName + %';
,你应该做 WHERE gameTitle LIKE '%' + gameName + '%';
按照您设置的方式,您将错误的通用文本 '%gameTitle%'
输入到查询中,而不是您真正想要的内容,例如:'%Creed%'
.
我正在尝试在存储过程中使用 LIKE %...% 但我不确定如何在运算符中使用传入变量。例如,我这样做:
DELIMITER //
CREATE PROCEDURE GetGameByName(IN gameName varchar(255))
BEGIN
SELECT *
FROM game
WHERE gameTitle LIKE '% + gameName + %';
END //
DELIMITER ;
但是当我这样称呼它时
CALL GetGameByName('Creed');
它没有返回任何内容(我有一个带有 gameTitle "Assassin's Creed"
的游戏知道我做错了什么吗?谢谢
由于评论中的问题已更新 - 现在的解决方案是 WHERE gameTitle LIKE CONCAT('%',gameName,'%')
===== 上一个回答 =====
在我看来你好像忘记了引号。而不是 WHERE gameTitle LIKE '% + gameName + %';
,你应该做 WHERE gameTitle LIKE '%' + gameName + '%';
按照您设置的方式,您将错误的通用文本 '%gameTitle%'
输入到查询中,而不是您真正想要的内容,例如:'%Creed%'
.