将第一天列添加到带有表达式的表中

时间:2019-01-08 09:21:54

标签: mysql date alter-table dateadd

我正在使用“下面的代码”向表中添加“每月的第一天”列,并带有自动更新的表达式。但这会引发语法错误。有人请帮忙。

ALTER TABLE `abc`.`t1` 
ADD COLUMN `First_Day` DATE NULL DEFAULT select DATE_ADD(DATE_ADD(LAST_DAY(report_date),
        INTERVAL 1 DAY),
    INTERVAL - 1 MONTH) AFTER `Totals`;

2 个答案:

答案 0 :(得分:0)

mysql不允许使用表达式设置默认值。

您可以为此创建触发器。

delimiter $$
CREATE TRIGGER test_trigger BEFORE INSERT ON `product` 
FOR EACH ROW SET
    NEW.myCol= DATE_ADD(DATE_ADD(LAST_DAY(new.report_date),
        INTERVAL 1 DAY),
    INTERVAL - 1 MONTH);
END$$
delimiter;

答案 1 :(得分:0)

我会问您为什么要存储它,但是如果必须要生成一个列的话可能会这样做。

drop table if exists t;
create table t(id int, report_date date);

ALTER TABLE t
ADD COLUMN `First_Day` DATE as 
(date_add(date_add(last_day(date(report_date)),interval 1 day),interval -1 month));

insert into t (id,report_date) values
(1,'2018-01-08'),(2,'2018-02-09');

select * from t;

 +------+-------------+------------+
| id   | report_date | First_Day  |
+------+-------------+------------+
|    1 | 2018-01-08  | 2018-01-01 |
|    2 | 2018-02-09  | 2018-02-01 |
+------+-------------+------------+
2 rows in set (0.00 sec)

如果您选择这种方式或通过触发器,则必须编写一次更新以填充此列中的现有数据。