create a table with date name

戏子无情 提交于 2020-02-05 13:57:06

问题


I am writing a simple procedure to backup a table-

CREATE PROCEDURE daily_backup()
BEGIN
   DECLARE given_date VARCHAR(25);
   SET given_date = now(); 

   CREATE TABLE given_date LIKE db1.table1;
   INSERT INTO given_date SELECT * FROM db1.table1;


END

But it creates a table with name given_date . I want to create a table with date as name. How to do the same ?


回答1:


Try this one

DELIMITER |
CREATE PROCEDURE daily_backup()
BEGIN
  SET @s = CONCAT('CREATE TABLE bak_', DATE_FORMAT(CURDATE(), '%Y%m%d'), ' SELECT * FROM table1');
  PREPARE stmt FROM @s;
  EXECUTE stmt;
END
|
DELIMITER ;

UPDATE: You can make it run multiple times a day

DROP PROCEDURE daily_backup;
DELIMITER |
CREATE PROCEDURE daily_backup()
BEGIN
  SET @tbl = DATE_FORMAT(CURDATE(), '%Y%m%d');
  SET @s = CONCAT('DROP TABLE IF EXISTS bak_', @tbl);
  PREPARE stmt FROM @s;
  EXECUTE stmt;

  SET @s = CONCAT('CREATE TABLE bak_', @tbl, ' SELECT * FROM table1');
  PREPARE stmt FROM @s;
  EXECUTE stmt;
END
|
DELIMITER ;

Here is SQLFiddle demo




回答2:


generate create statement with prepare like :-

set @given_date = now();
SET @sql = CONCAT("CREATE TABLE ",@given_date," as SELECT * FROM db1.table1");
PREPARE stmt from @sql;
EXECUTE stmt;

ps:- table name should be valid according to this.



来源:https://stackoverflow.com/questions/17106254/create-a-table-with-date-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!