4

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

2012_10_15_ncvoter68
2012_11_15_ncvoter68
2012_12_15_ncvoter68

你明白了。

假设我刚刚创建了 table 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 专家可以提供帮助!

4

2 回答 2

4

不,你不能那样做。

您必须使用过程语言处理变量替换。

正如手册所说(http://dev.mysql.com/doc/refman/5.1/en/user-variables.html)

用户变量旨在提供数据值。它们不能直接在 SQL 语句中用作标识符或标识符的一部分,例如在需要表或数据库名称的上下文中,或用作保留字(如 SELECT)。

于 2012-12-16T03:48:26.310 回答
4

我查看了我的旧 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;

它不漂亮,也不简洁,但它有效!

于 2012-12-16T04:11:05.620 回答