【发布时间】:2021-05-29 04:33:11
【问题描述】:
我使用 MySQL 的事件调度程序定期执行代码,即每天或每小时。在我的代码中,我使用'CURDATE()'并将其分配给一个变量。不幸的是,MySQL 只在第一个实例中计算这个。它不会在每次迭代中重新计算它,这意味着第一次通过它会有正确的日期,但之后每次都会有错误的日期。如果我手动运行代码,即没有事件调度程序,也会发生同样的情况。
如何强制 MySQL 重新计算变量?
我试过这个(这个只在第一次有效):
SET @stmt := CONCAT('ALTER TABLE myTable ADD myColum_', DATE_FORMAT(NOW(), '%Y_%M_%D_%H_%m'), ' SMALLINT(5);');
PREPARE stmt from @stmt;
EXECUTE stmt;
还有这个(这个甚至第一次都不起作用):
PREPARE stmt from ALTER TABLE myTable ADD
CONCAT('myColumn_', DATE_FORMAT(NOW(), '%Y_%M_%D_%H_%mm'), '
SMALLINT(5);'); EXECUTE stmt;
【问题讨论】:
-
如果您希望
CURDATE()始终获取最新值,而不是简单地将变量用法替换为CURDATE()本身,这将使其始终获取最新值。 -
SET @stmt := CONCAT('ALTER TABLE myTable ADD column_', DATE_FORMAT(NOW(), '%Y_%M_%D_%H_%m'), 'SMALLINT(5);' );从@stmt 准备stmt;执行 stmt;
-
如果不使用变量,我无法找到我想要的方法
-
您能否更新问题以包含完整的代码 sn-p,这样会更容易提供帮助。
-
':=' 在这种情况下似乎是多余的。当然'='就足够了。