Добавление вычисляемого столбца в Postgres SQL на основе даты - PullRequest
1 голос
/ 28 февраля 2020

Вот моя таблица.

CREATE TABLE annual_goals (
  id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
  content TEXT NOT NULL,
  complete BOOLEAN DEFAULT false,
  date_created TIMESTAMP DEFAULT now() NOT null,
  date_modified TIMESTAMP DEFAULT now() NOT null
);

Я хочу изменить ее так, чтобы я мог добавить новый столбец с именем month_num, который возвращает номер месяца, указанного в date_created (т. Е. Если date_created записи равен 5 / 31/2019, я хочу, чтобы month_num автоматически заполнялся 5).

Я пробовал следующее, но получаю сообщение об ошибке «ERROR: синтаксическая ошибка в или около« AS »

ALTER TABLE annual_goals
    ADD year_num
        AS year(date_created);

Любая помощь очень ценится. Спасибо

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Вы можете попробовать это:

ALTER TABLE annual_goals
    ADD year_num int;

UPDATE annual_goals
SET year_num=year(date_created);
0 голосов
/ 28 февраля 2020

У вас есть две ошибки в коде. Во-первых, MySQL требует тип. Во-вторых, выражение должно быть заключено в круглые скобки:

ALTER TABLE annual_goals ADD year_num int AS ( year(date_created) );

РЕДАКТИРОВАТЬ:

В Postgres, вы можете использовать синтаксис:

alter table annual_goals
    add year_num int generated always as (extract(year from date_created)) stored;

Здесь - это дБ <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...