2012-06-06 17 views
39

Mam następującą tabelę projects.Jak dodać liczbę dni w postgresql datetime

id title  created_at      claim_window 
1 Project One 2012-05-08 13:50:09.924437  5 
2 Project Two 2012-06-01 13:50:09.924437  10 

A) Chcę znaleźć termin z obliczeniem deadline = created_at + claim_window(No. of days).

Coś jak podążanie.

id title  created_at      claim_window deadline 
1 Project One 2012-05-08 13:50:09.924437  5   2012-05-13 13:50:09.924437 
2 Project Two 2012-06-01 13:50:09.924437  10   2012-06-11 13:50:09.924437 

B] Chcę również znaleźć projekty, których termin jest już

id title  created_at      claim_window deadline 
1 Project One 2012-05-08 13:50:09.924437  5   2012-05-13 13:50:09.924437 

próbuję coś jak następujące.

SELECT * FROM "projects" WHERE (DATE_PART('day', now()- created_at) >= (claim_window+1)) 

Ale z jakiegoś powodu nie działa.

Odpowiedz

70

To daje termin:

select id, 
     title, 
     created_at + interval '1' day * claim_window as deadline 
from projects 

Aby uzyskać wszystkie projekty, w których termin jest skończona, przeznaczenie:

select * 
from (
    select id, 
     created_at + interval '1' day * claim_window as deadline 
    from projects 
) t 
where localtimestamp at time zone 'UTC' > deadline 
+0

ale jeszcze jedna kwestia jest wystąpić moje created_at ma typ danych 'znacznik czasu bez czasu zone' AND current_timestamp ma datatype 'timestamp ze strefą czasową', więc nie otrzymuję poprawnej odpowiedzi – Salil

+0

@Salil:' LOCALTIMESTAMP' to 'znacznik czasu bez strefy czasowej' –

+0

@Salil: To też nie ma znaczenia, wynik byłby to samo z 'timestamp' lub' timestamptz', jak l ong, ponieważ dane odnoszą się do tego samego punktu w czasie. Dodawanie dnia ma taki sam wpływ na oba. –