Giải pháp của bạn là tốt. Nếu ngày là literals, tôi muốn, mặc dù:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
này thực hiện giống hệt nhau, nhưng là maintenable hơn, bởi vì nó làm cho rõ ràng quan điểm của mỗi "ngày" đen trở thành một dấu thời gian, không phải là một ngày . Ví dụ, giả đôi khi có người thay đổi truy vấn của bạn như sau
AND datefield <= '2012-01-01'
... mong đợi (và thất bại) để bao gồm cả ngày "2012/01/01" trong truy vấn. Với cú pháp sau, ý định rõ ràng hơn và sự nhầm lẫn này được ngăn chặn.
Để làm cho nó thậm chí còn rõ ràng hơn (có lẽ quá dài dòng), bạn có thể làm diễn viên rõ ràng:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
tôi sẽ không sử dụng to_date()
đây vì những lý do tương tự (tiềm năng datatype nhầm lẫn), cũng không phải to_timestamp()
(nó trả về một số timestamptz
).
BTW, tôi đã sửa đổi trường hợp để tuân thủ thực tiễn được khuyến nghị (từ khóa viết hoa, số nhận dạng thường)
Có vấn đề gì với điều đó? Bạn có thể sử dụng 'giữa 2010-01-01' và 2012-01-01', nhưng nó gần như giống nhau, thực sự. Có cách nào tốt hơn để làm điều này với MSSQL (tôi chưa bao giờ sử dụng nó)? – Andre
@Andre Tốt hơn là chỉ định rõ định dạng ngày. –
Nó ổn, nó chỉ chạy dài. Tôi đảm bảo có một chỉ mục trên sân, nhưng nó chỉ mất nhiều thời gian hơn tôi thường làm. –