首页 文章

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

提问于
浏览
3

我在Postgres的PubMed上存储期刊论文的数据,我想存储论文的出版日期 . 但是,有时日期是just a year(参见 PubDate 字段),有时是一个月和一年,有时是一天,一个月和一年 .

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

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

为了我的目的,我想我只需要一年,但我不知道这是为了所有可能的未来目的 .

也许我应该只有 daymonthyear 的文本字段,然后如果我需要它,我总能在将来将它们转换为日期字段?

2 回答

  • 0

    我将它存储为 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 中的任何“随机”日期和月份值 .

  • 2

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

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

相关问题