2012-01-04 44 views
11

Tôi đang chuyển đổi tập lệnh Unix bằng lệnh giao dịch SQL thành lệnh PostgreSQL.Chọn bản ghi giữa hai dấu thời gian

Tôi có một bảng có bản ghi có trường last_update_time (xtime) và tôi muốn chọn mọi bản ghi trong bảng đã được cập nhật trong một khoảng thời gian đã chọn.

Giả sử thời gian hiện tại là 05/01/2012 10:00:00 và thời gian đã chọn là 04/01/2012 23:55:00. Làm cách nào để chọn tất cả các bản ghi từ bảng đã được cập nhật giữa các ngày này. Tôi đã chuyển đổi 2 lần thành giây trong tập lệnh Unix trước khi phát hành lệnh psql và đã tính toán khoảng thời gian tính bằng giây giữa 2 giai đoạn.

Tôi nghĩ cái gì đó như

SELECT A,B,C FROM table 
WHERE xtime BETWEEN now() - interval '$selectedtimeParm(in secs)' AND now(); 

tôi đang gặp khó khăn đánh giá Parm cho selectedtimeParm - nó không giải quyết đúng cách.

Chú ý: Tôi không thay đổi việc sử dụng chính xác các điều khoản period, time frame, timedate cho kiểu datetime timestamp vì tôi thảo luận rằng trong câu trả lời của tôi.

Trả lời

24

Có gì sai với:

SELECT a,b,c 
FROM table 
WHERE xtime BETWEEN '2012-04-01 23:55:00'::timestamp 
       AND now()::timestamp; 

Nếu bạn muốn để hoạt động với một số giây như interval:

... 
WHERE xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm 
       AND now()::timestamp; 

Lưu ý, làm thế nào tôi đã sử dụng định dạng ngày tháng theo tiêu chuẩn ISO 8601 YYYY-MM-DD h24:mi:ss không rõ ràng với bất kỳ vị trí nào hoặc cài đặt DateStyle.

Cũng lưu ý rằng giá trị đầu tiên cho cấu trúc GIỮA GIỮ phải là giá trị nhỏ hơn. Nếu bạn không biết giá trị nào nhỏ hơn, hãy sử dụng BETWEEN SYMMETRIC để thay thế.

Trong câu hỏi của bạn, bạn tham khảo loại ngày giờ timestamp là "ngày", "thời gian" và "khoảng thời gian". Trong tiêu đề bạn đã sử dụng cụm từ "khung thời gian", mà tôi đã thay đổi thành "dấu thời gian". Tất cả các điều khoản này đều sai. Tự do trao đổi chúng làm cho câu hỏi thậm chí còn khó hiểu hơn.

Điều đó và thực tế là bạn chỉ gắn thẻ câu hỏi psql (vấn đề khó liên quan đến thiết bị đầu cuối dòng lệnh) có thể giúp giải thích tại sao không ai trả lời trong nhiều ngày. Thông thường, chỉ vài phút xung quanh đây thôi. Tôi đã có một thời gian khó hiểu câu hỏi của bạn, đã phải đọc nó một vài lần.

Bạn cần hiểu các loại dữ liệu date, interval, timetimestamp - có hoặc không có múi giờ. Bắt đầu bằng cách đọc chương "Date/Time Types" in the manual.

Thông báo lỗi cũng sẽ mất một chặng đường dài.

+0

Tôi tìm thấy câu trả lời của mình: chọn * từ TABLE trong đó record_time GIỮA $ from_datetime VÀ NOW(); Cảm ơn – Sharon

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