在mysql的CURRENT_TIMESTAMP中添加6个月

时间:2018-08-21 11:37:55

标签: mysql sql

在MySQL中创建表时,是否也有可能将CURRENT_TIMESTAMP添加6个月?如果可以,怎么办?将数据插入表中时,我能够做到这一点,但我希望它能自动将自身添加到表中。 像这样:

CREATE TABLE IF NOT EXISTS promos
(
expiryDateOfReward DATETIME NOT NULL DEFAULT DATE_ADD(MONTH, 6, CURRENT_TIMESTAMP)
);

2 个答案:

答案 0 :(得分:4)

我认为MySQL不支持日期/时间的默认值表达式。

更多最新版本支持生成的列。这允许您执行以下操作:

CREATE TABLE IF NOT EXISTS promos
(
    createdAt datetime default CURRENT_TIMESTAMP,
    expiryDateOfReward DATETIME generated always as (createdAt + interval 6 month)
);

还要注意,添加六个月的语法适用于MySQL。

答案 1 :(得分:4)

MySQL不支持默认值的日期/时间表达式。
但是您可以为此使用触发器。

CREATE TRIGGER setExpiryDateOfReward
BEFORE INSERT ON promos
FOR EACH ROW SET NEW.expiryDateOfReward = NEW.expiryDateOfReward + INTERVAL 6 MONTH;

参见演示https://www.db-fiddle.com/f/gBHjoNC5jMUeJ89Ya2MujS/0

从Gordon Linoff生成的列是一个更合适的答案,但要求MySQL的最低版本为5.7
触发解决方案要求最低MySQL版本为5.1