2012-06-06 40 views
39

Ho una tabella seguente projects.Come aggiungere il numero di giorni in postgreql 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) Voglio trovare il termine con il calcolo deadline = created_at + claim_window(No. of days).

Qualcosa come seguire.

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] Ho anche desidera trovare il progetti il ​​cui termine ultimo è andato

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 

provo qualcosa come segue.

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

Ma per qualche motivo non funziona.

risposta

70

Questo vi darà la scadenza:

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

Per ottenere tutti i progetti in cui il termine è finita, uso:

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

ma un altro problema è verificare la mia created_at ha tipo di dati 'timestamp senza tempo zone' AND current_timestamp ha datatype 'timestamp con fuso orario', quindi non ottengo risposta corretta – Salil

+0

@Salil:' LOCALTIMESTAMP' è un 'timestamp senza fuso orario' –

+0

@Salil: Inoltre non importa, il risultato sarebbe lo stesso con 'timestamp' o' timestamptz', come l in quanto i dati si riferiscono allo stesso punto nel tempo. L'aggiunta di un giorno ha lo stesso effetto su entrambi. –

Problemi correlati