PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Railsy 3.1:Odpytywanie Postgresa o rekordy w przedziale czasowym

Tracisz kontrolę nad strefami czasowymi, dzwoniąc do to_date więc nie rób tego:

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

Kiedy some_date.to_datetime , otrzymasz instancję DateTime, która jest w UTC, więc wynik czegoś takiego:

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

będzie miał godzinę 00:00:00 i strefę czasową UTC; 00:00:00 to poprawna pora dnia w @person.time_zone ale nie jest odpowiedni dla UTC (chyba że, oczywiście, @person jest w strefie czasowej +0).

I możesz uprościć zapytanie dzięki overlaps :

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

Zauważ, że overlaps działa z przerwami półotwartymi:

Każdy okres jest uważany za reprezentujący przedział półotwarty start <= time < end , chyba że początek i koniec są równe, w którym to przypadku reprezentuje ten pojedynczy moment.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa funkcja Ln() w PostgreSQL

  2. GeoDjango w systemie Windows:Nie można znaleźć biblioteki GDAL / OSError:[WinError 126] Nie można znaleźć określonego modułu

  3. Uaktualnić kolumnę PostgreSQL JSON do JSONB?

  4. PgBouncer 1.7 – „Kolory różnią się po zmartwychwstaniu”

  5. Jak używać EXECUTE FORMAT ... USING w funkcji postgres