sql >> Database >  >> RDS >> PostgreSQL

Rails 3.1:Postgres opvragen voor records binnen een tijdsbereik

Je verliest je tijdzones uit het oog als je to_date call belt dus doe dat niet:

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

Wanneer je some_date.to_datetime , krijg je een DateTime-instantie die in UTC is, dus het resultaat van zoiets als dit:

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

zal een tijd van de dag hebben van 00:00:00 en een tijdzone van UTC; de 00:00:00 is de juiste tijd van de dag in @person.time_zone maar niet geschikt voor UTC (tenzij, natuurlijk, @person bevindt zich in de +0 tijdzone).

En je zou je zoekopdracht kunnen vereenvoudigen met overlaps :

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

Merk op dat overlaps werkt met halfopen intervallen:

Elke tijdsperiode wordt beschouwd als het halfopen interval start <= time < end , tenzij begin en einde gelijk zijn, in welk geval het dat ene moment vertegenwoordigt.




  1. SQLite - Maak een relatie

  2. TransactSQL om een ​​ander TransactSQL-script uit te voeren

  3. Een MariaDB-cluster implementeren voor hoge beschikbaarheid

  4. Installeer en configureer MySQL Workbench op Ubuntu 16.04