Добавить столбец первого дня в таблицу с выражением - PullRequest
0 голосов
/ 08 января 2019

Я использую код ниже, чтобы добавить в таблицу столбец первого дня месяца с выражением для автоматического обновления. Но это вызывает синтаксическую ошибку. кто-то пожалуйста помогите.

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 голосов
/ 08 января 2019

Я бы спросил, почему вы хотите сохранить это, но если вам нужно, сгенерированный столбец может подойти.

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)

Если вы решите пойти по этому пути или с помощью триггера вам придется записать одноразовое обновление, чтобы заполнить этот столбец для существующих данных.

0 голосов
/ 08 января 2019

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