PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL- Lọc phạm vi ngày

Giải pháp của bạn là tốt. Tuy nhiên, nếu ngày tháng là chữ, tôi muốn:

WHERE datefield >= '2010-01-01 00:00:00' 
 AND  datefield <  '2012-01-01 00:00:00'

Điều này hoạt động hoàn toàn giống nhau, nhưng dễ bảo trì hơn, bởi vì nó làm rõ quan điểm của mỗi "ngày" theo nghĩa đen là một dấu thời gian, không phải là một ngày. Ví dụ:giả sử đôi khi ai đó thay đổi truy vấn của bạn thành như sau

    AND  datefield <=  '2012-01-01'

... mong đợi (và không thành công) đưa cả ngày "2012-01-01" vào truy vấn. Với cú pháp muộn hơn, ý định rõ ràng hơn và sự nhầm lẫn này được ngăn chặn.

Để làm cho nó rõ ràng hơn (có lẽ quá dài dòng), bạn có thể thực hiện 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ự (có thể nhầm lẫn kiểu dữ liệu), cũng không phải to_timestamp() (nó trả về một timestamptz ).

BTW, tôi đã sửa đổi trường hợp để tuân thủ thông lệ được khuyến nghị (từ khóa ở dạng chữ hoa, số nhận dạng ở dạng chữ thường)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhân hai cột đã được tính toán trên một câu lệnh CASE

  2. Bỏ qua dấu ngoặc kép để thực hiện truy vấn trên PostgreSQL

  3. Không thể bỏ vai trò PostgreSQL. Lỗi:`không thể bỏ vì một số đối tượng phụ thuộc vào nó`

  4. Cập nhật giá trị cột bảng dựa trên logic có điều kiện

  5. Nâng cấp từ PostGIS 2.1:Lỗi:cố gắng xác định lại tham số postgis.backend