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

Rails 3.1:Truy vấn Postgres cho các bản ghi trong một phạm vi thời gian

Bạn đang mất dấu múi giờ khi gọi to_date vì vậy đừng làm điều đó:

@today    = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day

Khi bạn some_date.to_datetime , bạn nhận được một phiên bản DateTime ở UTC, do đó kết quả của một cái gì đó như thế này:

Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime

sẽ có thời gian trong ngày là 00:00:00 và múi giờ là UTC; 00:00:00 là giờ chính xác trong ngày ở @person.time_zone nhưng không phù hợp với UTC (tất nhiên, trừ khi @person ở múi giờ +0).

Và bạn có thể đơn giản hóa truy vấn của mình bằng overlaps :

where(
    '(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
    :today => @today, :tomorrow => @tomorrow
)

Lưu ý rằng overlaps hoạt động với khoảng thời gian nửa mở:

Mỗi khoảng thời gian được coi là đại diện cho khoảng thời gian nửa mở start <= time < end , trừ khi bắt đầu và kết thúc bằng nhau, trong trường hợp đó, nó biểu thị thời điểm duy nhất đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo số thứ tự trong PostgreSQL

  2. GIS:PostGIS / PostgreSQL so với MySql và SQL Server?

  3. Chuyển đổi tên tháng thành số tháng trong PostgreSQL

  4. Cách chuyển đổi Dấu thời gian Unix thành Giá trị Ngày / Giờ trong PostgreSQL

  5. Tôi có thể thêm ràng buộc DUY NHẤT vào bảng PostgreSQL, sau khi nó đã được tạo không?