2012-06-06 29 views
39

Tôi có một bảng sau đây projects.Cách thêm số ngày trong datetime postgresql

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) Tôi muốn tìm thời hạn với phép tính deadline = created_at + claim_window(No. of days).

Thứ gì đó như sau.

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] Tôi cũng muốn tìm các dự án có thời hạn đã biến mất

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 

tôi cố gắng một cái gì đó như sau.

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

Nhưng vì lý do nào đó, nó không hoạt động.

Trả lời

70

này sẽ cung cấp cho bạn thời hạn:

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

Để có được tất cả các dự án mà thời hạn kết thúc, sử dụng:

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

nhưng thêm một vấn đề là xảy ra created_at tôi có datatype 'timestamp mà không cần thời gian zone' AND current_timestamp có kiểu dữ liệu 'dấu thời gian với múi giờ', do đó tôi không nhận được câu trả lời đúng – Salil

+0

@Salil:' LOCALTIMESTAMP' là dấu thời gian không có múi giờ –

+0

@Salil: Nó cũng không quan trọng, kết quả sẽ là giống với 'timestamp' hoặc' timestamptz', như l ong như dữ liệu được đề cập đến cùng một điểm trong thời gian. Thêm một ngày có tác dụng tương tự trên cả hai. –

Các vấn đề liên quan