2011-09-20 4 views
11

現在の年と月(2011-09)に基づく名前のテーブルを作成しようとしていますが、MySQLはこのようには見えません。mysql(5.1)>変数からテーブル名を作成

SET @yyyy_mm=Year(NOW())+'-'+Month(NOW()); 
CREATE TABLE `survey`.`@yyyy_mm` LIKE `survey`.`interim`; 
SHOW TABLES IN `survey`; 

+-----------+ 
| interim | 
+-----------+ 
| @yyyy_mm | 
+-----------+ 

私は@yyyy_mm周りティックなしCREATE TABLE;をすれば、私は一般的な構文エラーを取得します。

@yyyy_mmは、に解決されます。

+0

識別子は変数ではありません。変数は識別子ではありません。これには、 "動的SQL"を使用する必要があります。これは、私が扱ってきたすべてのデータベースではうんざりです。 –

+0

http://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedureおよびhttp://stackoverflow.com/questions/929244/mysql-create-table-ダイナミックデータベース名とhttp://stackoverflow.com/questions/5530755/mysql-variables-storing-database-name –

答えて

24

あなたはこのような何かを行うことができるはず:

SET @yyyy_mm=DATE_FORMAT(now(),'%Y-%m'); 
SET @c = CONCAT('CREATE TABLE `survey`.`',@yyyy_mm, '` LIKE `survey`.`interim`'); 
PREPARE stmt from @c; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

nos&@nick:sweet!ありがとう! – jacob

6
set @yyyy_mm=concat(year(now()),'-',month(now())); 
set @str = concat('create table survery.`', @yyyy_mm,'` like survey.interim;'); 
prepare stmt from @str; 
execute stmt; 
deallocate prepare stmt; 
関連する問題