我正在使用“下面的代码”向表中添加“每月的第一天”列,并带有自动更新的表达式。但这会引发语法错误。有人请帮忙。
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`;
答案 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)
如果您选择这种方式或通过触发器,则必须编写一次更新以填充此列中的现有数据。