如何用bash以“-yyyy-mm-dd”格式附加mysql表名和今天的日期

1tuwyuhd  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(217)

在linux cmd行中,我将如何以yyyy-mm-dd格式附加一个mysql表名和今天的日期。例如,如果今天的日期是2018年4月13日,它会将tablename更改为tablename-2018-04-13。
我相信我已经接近从命令行进入mysql后所做的尝试:

ALTER TABLE database.tablename RENAME database.tablename-$(date +%Y-%m-%d);

这将生成一个错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near '-$(date +%Y-%m-%d)' at line 1
qq24tv8q

qq24tv8q1#

所有的答案和评论都让我找到了最适合我的答案。我抛弃了-yyyy-mm-dd附加约定,因为它除了制造问题之外对我没有任何作用,正如上面@bill\u karwin所强调的那样。这是一个简单的bash命令,非常类似于上面@anthony的评论,对我很有用:

mysql database -e "ALTER TABLE table RENAME table_$(date +%Y%m%d)";

这会将表重命名为(例如,假设在4/15/18上运行)表_。

vwkv1x7d

vwkv1x7d2#

您似乎在mysql客户机中使用bash命令替换。这是行不通的,因为sql对bash语法一无所知,比如 $() .
另一个问题是必须使用标识符,而不是字符串。表的名称不能是表达式,必须在alter语句中修复,然后才能对其进行解析。
您可以使用准备和执行:

mysql> SET @sql = CONCAT('ALTER TABLE database.tablename RENAME database.tablename_', DATE_FORMAT(CURDATE(), '%Y%m%d'));
mysql> PREPARE stmt FROM @sql;
mysql> EXECUTE stmt;

注意我更改了你的表名,因为 - 是sql标识符中的特殊字符。通常不能使用具有 - 角色。如果将表名放在分隔符中,则可以。mysql的分隔符是反记号。

mysql> SET @sql = CONCAT('ALTER TABLE database.tablename RENAME database.`tablename-', DATE_FORMAT(CURDATE(), '%Y-%m-%d'), '`');

然后像以前一样准备和执行。
但这是不必要的复杂,每次在查询中使用此表时,都需要记住使用反勾号。
避免在表名中使用特殊字符要简单得多。

sf6xfgos

sf6xfgos3#

set @sql = CONCAT('RENAME TABLE `tablename` TO tablename', DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y_%m_%d')); 
prepare s from @sql; 
execute s;

根据@anthony的评论更新。测试sql命令;

相关问题