You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术请求:通过自动添加执行当日日期重命名并复制数据表

复制数据表并自动添加当日日期后缀

下面针对主流数据库提供实现方案,自动将原表复制为带当日日期(格式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:10:26