Tôi có bảng với một trong các cột là ngày theo định dạng 'YYYY-MM-DD'. Tôi có thể sử dụng lựa chọn để nhận tất cả dữ liệu trong phạm vi hàng tháng không? Giả sử tôi muốn tất cả dữ liệu từ 2012-01-xx đến 2013-04-xx. Vì vậy, tôi về cơ bản tìm kiếm một truy vấn SQL như một đưa ra dưới đây:Lựa chọn Postgresql giữa phạm vi tháng
SELECT * FROM table WHERE date IN BETWEEN '2012-01' AND '2013-04' (INVALID QUERY)
Vì mỗi tháng bắt đầu với '01' Tôi có thể sửa đổi các truy vấn trên để điều chỉnh điều kiện bắt đầu.
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND '2013-04' (INVALID QUERY)
Bây giờ vấn đề đi kèm với ngày kết thúc. Tôi phải tính toán ngày cuối cùng của tháng cụ thể theo cách thủ công, lấy tất cả các yếu tố trong tài khoản như độ dài của tháng, năm nhuận vv, vì truy vấn không thành công nếu ngày đã cho không hợp lệ. Vì vậy, hiện tại tôi đang làm một việc như sau:
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND 'VALID_MONTH_END_DATE' (VALID Query)
Tôi muốn biết liệu có cách nào để tránh tính toán ngày kết thúc hợp lệ này không?
Làm rõ
Tôi đã nghĩ trên ngày đầu tiên của tháng tiếp theo, nhưng thậm chí sau đó tôi sẽ phải áp dụng một số logic nói, nếu tháng mười hai của mình, vào tháng tới sẽ là tháng Giêng năm tới. Tôi muốn biết nếu một giải pháp chỉ SQL là có thể?
Chông hoạt động tốt khi tôi biết ngày cuối cùng. Tôi bị kẹt khi tháng cuối cùng là tháng 12. –
Bạn lấy thông số từ đâu? Một ứng dụng? Trang web? Một truy vấn khác? Bạn có chúng như là chuỗi hoặc số nguyên (năm, tháng)? –
Việc chăm sóc phải được thực hiện khi thêm 'khoảng thời gian' thành' ngày'. Kết quả là 'dấu thời gian'. Tuy nhiên, hoạt động trong ví dụ trên. Truyền kết quả đến 'ngày', nếu nó quan trọng. Việc thêm khoảng thời gian 'n tháng' luôn dẫn đến cùng một ngày trong tháng, bất kể số ngày thực tế trong các tháng liên quan - hoặc ngày có sẵn tối đa, khi tháng kết quả có ít ngày hơn. Để thêm số ngày chính xác, hãy thêm 'số nguyên' vào' ngày', kết quả này sẽ là 'ngày'. –