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

时间:2017-06-13 19:02:39

标签: mysql parameters names workbench

显示包含" 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查询中进行了测试

2 个答案:

答案 0 :(得分: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也喜欢):
  2.   

    ...用户WHERE城市LIKE'%a%&#39 ;;

    而不是:

      

    ... userWHEREcityLIKE'%a%'

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

      '%的%'应该成为'"%a%"'

      1. 最后DEALLOCATE - 你宣布了一个全局var' myquery'默认有效,直到会话重置 - 可能导致冲突和错误

      2. 提示要查看CONCAT()的结果,请使用

      3.   

        SELECT @statement

答案 1 :(得分:0)

您可以使用

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