[英]Can I use a MySQL PREPARE statement in a function to create a query with a variable table name
[英]Can I use a MySQL variable to name a table?
我有一個工作流程,要求我保留一堆名稱不同的表,例如
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大師能夠提供幫助!
不,你不能那樣做。
您必須使用過程語言來處理變量替換。
如手冊所述(http://dev.mysql.com/doc/refman/5.1/en/user-variables.html)
用戶變量旨在提供數據值。 它們不能在SQL語句中直接用作標識符或標識符的一部分,例如在需要表或數據庫名稱的上下文中,或用作保留字(例如SELECT)。
我翻閱了舊的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;
它不漂亮,也不簡潔,但可以!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.