MySQL:如何在MySQL查询中将列名作为参数传递

问题描述 投票:0回答:2

显示包含“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查询中测试

mysql parameters names workbench
2个回答
2
投票

正确的语法如下:

SET @param = 'city';
SET @statement = CONCAT('SELECT * FROM user WHERE ', @param, ' LIKE ', '"%a%"');
PREPARE myquery FROM @statement;
EXECUTE myquery;
DEALLOCATE PREPARE myquery

要记住的事情:

  1. 在必要时在第2行的CONCAT参数中放置空格,因为CONCAT不会为你提供它们,例如:你(和MySQL也)更喜欢:

...用户WHERE城市LIKE'%a%';

而不是 :

... userWHEREcityLIKE'%a%'

  1. 添加额外的AND不同的引号:

'%a%'应成为'“%a%”'

  1. DEALLOCATE到最后 - 你声明一个全局var'myquery'默认有效,直到会话重置 - 可能导致冲突和错误
  2. 提示要查看CONCAT()的结果,请使用

选择@statement


0
投票

您可以使用

select id,date,@statement as any_name from table_name ;
SET @statement = (SELECT To_days( date_f ) - TO_DAYS( date )  FROM `table_name `);
© www.soinside.com 2019 - 2024. All rights reserved.