如何在postgres中以不同的精度存储日期?

Ric*_*ard 6 postgresql date

我正在 Postgres 中存储来自 PubMed 的期刊论文的数据,并且我想存储论文的发表日期。但是,有时日期只是一年(见PubDate字段),有时是一个月和一年,有时是日、月和年。

将这些数据存储在我的数据库中的明智方法是什么?

如果我使用 Postgres 日期字段,我显然还需要指定日期和月份,但在某些情况下我需要发明它们,而且我不喜欢丢失有关日期精度的信息的想法。

就我的目的而言,我认为我只需要一年,但我不知道这对于所有可能的未来目的都是正确的。

也许我应该只拥有day,month和 的文本字段,year然后如果我需要它们,我可以随时将它们转换为日期字段?

Lau*_*lbe 4

我会将其存储为date并存储精度。

例如:

CREATE TYPE date_prec AS ENUM ('day', 'month', 'year');

CREATE TABLE pub (
   pub_id integer PRIMARY KEY,
   pub_date date NOT NULL,
   pub_date_prec date_prec NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样查询表:

SELECT pub_id, date_trunc(pub_date_prec::text, pub_date)::date FROM pub;
Run Code Online (Sandbox Code Playgroud)

忽略 中的任何“随机”日期和月份值pub_date