显示所有包含“a”的城市:
SELECT * FROM user WHERE city LIKE '%a%'; -- works fine
正确的语法是什么:
SET @param = 'city';
SELECT * FROM user WHERE @param LIKE '%a%'; -- NOT yielding any rows
在 MySQL Workbench 查询中测试
最佳答案
正确的语法如下:
SET @param = 'city';
SET @statement = CONCAT('SELECT * FROM user WHERE ', @param, ' LIKE ', '"%a%"');
PREPARE myquery FROM @statement;
EXECUTE myquery;
DEALLOCATE PREPARE myquery
注意事项:
- 在必要时在第 2 行的 CONCAT 参数中添加空格,因为 CONCAT 不会为您添加空格,例如你(还有 MySQL)会更喜欢:
... user WHERE city LIKE '%a%';
而不是:
... userWHEREcityLIKE'%a%'
- 添加额外的和不同的引号:
'%a%' should become '"%a%"'
最后取消分配 - 您声明了默认情况下有效的全局变量“myquery”,直到 session 重置为止 - 可能会导致冲突和错误
提示要查看 CONCAT() 的结果,请使用
SELECT @statement
关于MySQL:如何在 MySQL 查询中传递列名作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44529593/