我有一个工作流程要求我保留一堆不同名称的表,如
2012_10_15_ncvoter68
2012_11_15_ncvoter68
2012_12_15_ncvoter68
你明白了。
假设我刚刚创建了表2012_12_15_ncvoter68
。
我想使用变量查询此表。例如,我可以定义一个变量:
SET @dt_ncv = CONCAT((SELECT DATE_FORMAT(CURDATE(), '%Y_%m_%d')),"_ncvoter68");
变量@dt_ncv
计算为字符串2012_12_15_ncvoter68
。
但我无法弄清楚如何(或者是否可能)使用此变量来引用该表。
查询:
SELECT count(*) FROM @dt_ncv;
只是给出了SQL语法错误。
我尝试过准备好的陈述,但似乎没有帮助。
我希望你们中的一些MySQL大师可以提供帮助!
答案 0 :(得分:3)
不,你做不到。
您必须以过程语言处理变量替换。
正如手册所述(http://dev.mysql.com/doc/refman/5.1/en/user-variables.html)
用户变量旨在提供数据值。他们不可能 直接在SQL语句中用作标识符或作为其一部分 标识符,例如在表或数据库名称所在的上下文中 预期的,或作为SELECT等保留字。
答案 1 :(得分:2)
我查看了我的旧MySQL注释并找到了一种方法:
SET @dt_ncv = CONCAT((SELECT DATE_FORMAT(CURDATE(), '%Y_%m_%d')),"_ncvoter68");
SET @cntstmt = CONCAT_WS(" ", "SELECT count(*) FROM",@dt_ncv);
PREPARE ncv_count_stmt FROM @cntstmt;
EXECUTE ncv_count_stmt;
它不漂亮而且不简洁,但它有效!