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

如何在Linux命令行给MySQL表名追加YYYY-MM-DD格式的当日日期

给MySQL表名追加当日日期的正确方法

嘿,我来帮你搞定这个问题~你遇到的语法错误,核心原因是你在MySQL命令行里用了shell的命令替换语法($(date...)),但MySQL本身根本不识别这个——MySQL会把$(date +%Y-%m-%d)当成表名的一部分,自然会报语法错误。

下面给你两种靠谱的解决方案,按需选择:

方法1:直接在shell环境中执行(推荐,适合脚本自动化)

这种方法让shell先解析日期变量,再把完整的SQL语句传给MySQL执行,不用进入MySQL交互模式。

基础写法

# 替换成你的用户名、数据库名和表名
mysql -u your_username -p -e "ALTER TABLE `database`.`tablename` RENAME TO `database`.`tablename-$(date +%Y-%m-%d)`;"

执行后会提示你输入MySQL密码,输入后就会自动完成重命名。

为什么加反引号?

因为表名里包含减号-,属于MySQL的特殊字符,必须用反引号`把数据库名和表名括起来,否则MySQL会把减号当成运算符,再次报错。

方法2:在MySQL交互模式内执行(适合临时手动操作)

如果一定要在MySQL命令行里操作,得用MySQL自己的日期函数和预处理语句(MySQL无法直接调用shell命令),步骤如下:

-- 1. 定义原数据库和表名
SET @old_db = 'database';
SET @old_table = 'tablename';

-- 2. 拼接新表名(用CURDATE()获取当日日期,默认就是YYYY-MM-DD格式)
SET @new_table = CONCAT(@old_table, '-', CURDATE());

-- 3. 拼接完整的ALTER语句,注意用反引号包裹标识符
SET @sql = CONCAT('ALTER TABLE `', @old_db, '`.`', @old_table, '` RENAME TO `', @old_db, '`.`', @new_table, '`;');

-- 4. 执行预处理语句
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

执行完这些语句后,你的表就会被重命名为tablename-YYYY-MM-DD格式。

注意事项

  • 确保你的MySQL账号拥有ALTER该表的权限;
  • 如果你的表名或数据库名本身包含特殊字符(比如空格、中文),一定要用反引号包裹;
  • 自动化脚本优先选方法1,更简洁高效。

内容的提问来源于stack exchange,提问作者James Hawkins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:29