2016-09-07 9 views
3

Postgres의 PubMed에서 저널 논문에 대한 데이터를 저장하고 있으며, 해당 논문의 출판 날짜를 저장하고 싶습니다. 그러나 때로는 날짜가 just a year (PubDate 참조)이고, 때로는 월과 1 년이고 때로는 일, 월 및 연도입니다.postgres의 정확도가 다른 날짜를 저장하는 방법은 무엇입니까?

내 데이터베이스에이 데이터를 저장하는 것이 현명한 방법은 무엇입니까?

내가 Postgres 날짜 필드를 사용하는 경우 분명히 일 및 월을 지정해야하지만 경우에 따라 발명해야 할 필요가 있으며 날짜에 대한 정보를 잃어 버릴 생각은 싫어합니다. 정도.

내 목적으로 나는 라고 생각합니다. 나는 한 해만 필요 하겠지만 가능한 모든 미래의 목적을 위해 그것이 진실인지 모릅니다.

아마도 day, monthyear에 대한 텍스트 입력란을 가지고 있어야하며, 필요하면 나중에 날짜 필드로 변환 할 수 있습니까?

+0

예, 결국 내 제안은 나에게 매우 합리적인 것 같습니다. 또한'CHECK' 제약 조건을 추가하여'day'가 null이 아니고'month'도 null이 아님을 확인할 수 있습니다. 또 다른 방법은 날짜 열의 정확성을 나타내는 날짜 열과 두 번째 열을 만드는 것입니다. – redneb

+0

가능한 [ISO-8601 in Postgres : 형식 날짜에 연도 만 삽입하는 방법? (불완전한 날짜 - 시간 값)] (http://stackoverflow.com/questions/21599997/iso-8601-in-postgres-how-to-insert-only-year-in-type-date-incomplete-date-tim) – moooeeeep

답변

1

나는 이것을 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의 모든 “ 임의 ”일 및 월 값을 무시.

0

날짜 필드가 있고 다른 필드가있을 수 있습니다. integer 유형의 'dateflag'라고 말하면됩니다. 전체 날짜 사용은 1, 사용 날짜와 월은 2, 사용 연도는 3과 같은 값이 있습니다. 이렇게하면 데이터를 검색하는 동안 수행 할 작업을 알 수 있습니다. 물론 opt 2와 3을 사용하면 삽입 작업을 수행하는 동안 연도 외에도 더미 날짜/월을 입력해야합니다.

3 필드의 아이디어는 완벽하게 유효합니다. 그러나 날짜의 신성함을 유지하기 위해서는 많은 검사가 필요합니다. (예 : 거기에있는 것처럼 - 다음 달이 있어야합니다. 개월 등).

관련 문제