如何在postgres中存储具有不同精度级别的日期?

时间:2016-09-07 11:16:37

标签: postgresql date

我在Postgres的PubMed上存储期刊论文数据,我想存储论文的发布日期。但是,有时日期为just a year(请参阅PubDate字段),有时是一个月和一年,有时是一天,一个月和一年。

将数据存储在我的数据库中是一种明智的方法吗?

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

出于我的目的,我认为我只需要一年,但我不知道为了所有可能的未来目的是真实的。

也许我应该只为daymonthyear设置文字字段,如果我需要,我可以随时将它们转换为日期字段吗?

2 个答案:

答案 0 :(得分:3)

我会将其存储为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
);

然后你可以这样查询表:

SELECT pub_id, date_trunc(pub_date_prec::text, pub_date)::date FROM pub;

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

答案 1 :(得分:0)

你可以有一个Date字段并有另一个字段 - 让我们说'dateflag'是整数类型。您的使用日期为2,使用日期和月份为2,使用年份为3。这样,在检索数据时,您将知道该怎么做。当然对于选择2和3,您需要在插入时插入除年份之外的虚拟日期/月份。

你对3个领域的想法也是完全有效的 - 但是需要进行大量的检查才能确保你保持日期的神圣性(就像有一天那样 - 那么月份必须在那里,有关天数的规则和几个月等)。