简体   繁体   English

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

[英]MySQL: How to pass a column name as parameter in MySQL query

Shows all cities containing "a" : 显示所有包含“ a”的城市:

SELECT * FROM user WHERE city LIKE '%a%';  -- works fine

What is the correct syntax : 正确的语法是什么:

SET @param = 'city';
SELECT * FROM user WHERE @param LIKE '%a%'; -- NOT yielding any rows

Tested in MySQL Workbench query 在MySQL Workbench查询中测试

The correct syntax goes like this: 正确的语法如下所示:

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

Things to keep in mind: 注意事项:

  1. put spaces in the CONCAT params in line#2 where necessary as CONCAT won't put them for you, eg you (and MySQL also) would prefer : 在必要的地方在第2行的CONCAT参数中放置空格,因为CONCAT不会为您放置空格,例如您(还有MySQL)更喜欢:

... user WHERE city LIKE '%a%'; ...用户所在城市,如'%a%';

rather than : 而不是 :

... userWHEREcityLIKE'%a%' ... userWHEREcityLIKE'%a%'

  1. add extra AND different quotes : 添加额外的和不同的报价:

'%a%' should become '"%a%"' '%a%'应该变成'“%a%”'

  1. DEALLOCATE in the end - you declared a global var 'myquery' valid by default till the session reset - may cause collisions and errors 最终进行DEALLOCATE-在默认情况下,声明全局变量'myquery'有效,直到会话重置为止-可能导致冲突和错误

  2. Tip To see the result of CONCAT(), use 提示要查看CONCAT()的结果,请使用

SELECT @statement SELECT @语句

you can use 您可以使用

select id,date,@statement as any_name from table_name ;
SET @statement = (SELECT To_days( date_f ) - TO_DAYS( date )  FROM `table_name `);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM