技术请求:通过自动添加执行当日日期重命名并复制数据表
复制数据表并自动添加当日日期后缀
下面针对主流数据库提供实现方案,自动将原表复制为带当日日期(格式YYYYMMDD)后缀的新表:
MySQL/MariaDB
使用动态SQL拼接表名,结合CURDATE()获取当日日期:
-- 替换这里的原表名 SET @original_table = 'x'; -- 拼接新表名:原表名_YYYYMMDD SET @new_table = CONCAT(@original_table, '_', DATE_FORMAT(CURDATE(), '%Y%m%d')); -- 构造复制表结构+数据的SQL语句 SET @sql = CONCAT( 'CREATE TABLE ', @new_table, ' LIKE ', @original_table, '; ', 'INSERT INTO ', @new_table, ' SELECT * FROM ', @original_table, ';' ); -- 执行动态SQL PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
CREATE TABLE ... LIKE会复制原表的结构、索引和约束;INSERT INTO同步数据- 如果只需要复制结构(不含数据),去掉
INSERT INTO那行即可
SQL Server
利用FORMAT()格式化日期,通过SELECT INTO快速复制表:
DECLARE @original_table NVARCHAR(128) = 'x'; -- 替换原表名 DECLARE @new_table NVARCHAR(128); DECLARE @sql NVARCHAR(MAX); SET @new_table = CONCAT(@original_table, '_', FORMAT(GETDATE(), 'yyyyMMdd')); -- SELECT INTO会创建新表并复制原表数据 SET @sql = CONCAT('SELECT * INTO ', @new_table, ' FROM ', @original_table); EXEC sp_executesql @sql;
- 若需要复制原表的约束、触发器等,需改用
CREATE TABLE ... AS结合系统视图查询结构的方式,SELECT INTO仅复制表结构和数据
PostgreSQL
使用TO_CHAR()格式化日期,通过EXECUTE执行动态SQL:
DO $$ DECLARE original_table TEXT := 'x'; -- 替换原表名 new_table TEXT; BEGIN new_table := CONCAT(original_table, '_', TO_CHAR(CURRENT_DATE, 'YYYYMMDD')); -- 创建新表并复制原表的结构和数据,%I用于安全处理标识符 EXECUTE format('CREATE TABLE %I AS TABLE %I', new_table, original_table); END $$;
CREATE TABLE ... AS TABLE会完整复制原表的结构、数据和默认值;若需复制索引、约束,需额外添加对应的创建语句
注意事项
- 确保执行账号拥有创建表和查询原表的权限
- 若原表包含自增列、序列或触发器,部分复制方式不会同步这些对象,需根据实际需求补充配置
内容的提问来源于stack exchange,提问作者UVB
相关产品推荐
相关产品推荐

