PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Rails 3.1:Meminta Postgres untuk catatan dalam rentang waktu

Anda kehilangan jejak zona waktu Anda saat menelepon to_date jadi jangan lakukan itu:

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

Saat Anda some_date.to_datetime , Anda mendapatkan instance DateTime yang ada di UTC sehingga hasilnya seperti ini:

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

akan memiliki waktu hari 00:00:00 dan zona waktu UTC; 00:00:00 adalah waktu yang benar dalam sehari di @person.time_zone tetapi tidak tepat untuk UTC (kecuali, tentu saja, @person berada di zona waktu +0).

Dan Anda dapat menyederhanakan kueri Anda dengan overlaps :

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

Perhatikan bahwa overlaps bekerja dengan interval setengah terbuka:

Setiap periode waktu dianggap mewakili interval setengah terbuka start <= time < end , kecuali awal dan akhir sama dalam hal ini mewakili satu waktu instan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana sql dengan pernyataan rekursif ditafsirkan?

  2. file input tampaknya menjadi dump format teks. Silakan gunakan psql

  3. Kembalikan Jenis Tabel dari fungsi A di PostgreSQL

  4. JPA flush vs komit

  5. Ambil catatan yang bukan nol setelah titik desimal di PostgreSQL