2012-06-06 12 views
39

Tengo una siguiente tabla projects.Cómo agregar el número de días en 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) Quiero encontrar la fecha límite con el cálculo deadline = created_at + claim_window(No. of days).

Algo así como los siguientes.

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] También quieren encontrar los proyectos cuyo plazo se ha ido

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 

Intento algo como siguiente.

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

Pero por alguna razón no está funcionando.

Respuesta

70

Esto le dará la fecha límite:

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

Para obtener todos los proyectos en los que el plazo ha terminado, 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

, sino una cuestión más es producir mi created_at tiene tipo de datos 'marca de tiempo sin tiempo zone' AND current_timestamp tiene el tipo de datos 'timestamp con la zona horaria', por lo tanto, no recibo la respuesta correcta – Salil

+0

@Salil:' LOCALTIMESTAMP' es una 'timestamp without time zone' –

+0

@Salil: Tampoco importa, el resultado sería lo mismo con 'timestamp' o' timestamptz', como l ong ya que los datos se refieren al mismo punto en el tiempo. Agregar un día tiene el mismo efecto en ambos. –

Cuestiones relacionadas