4

次のような異なる名前のテーブルをたくさん保持する必要があるワークフローがあります。

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の達人がお役に立てば幸いです。

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 に答える