使用表达式向表中添加第一天列

wbgh16ku  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(303)

我使用下面的代码将月份的第一天列添加到表中,并使用一个要自动更新的表达式。但它抛出了一个语法错误。有人请帮忙。

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`;
4uqofj5v

4uqofj5v1#

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;
ezykj2lf

ezykj2lf2#

我想问一下为什么要存储这个,但如果必须的话,一个生成的列就可以了。

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)

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

相关问题