我可以使用MySQL变量来命名表吗?

时间:2012-12-16 03:43:25

标签: mysql

我有一个工作流程要求我保留一堆不同名称的表,如

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大师可以提供帮助!

2 个答案:

答案 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;

它不漂亮而且不简洁,但它有效!