sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails 3.1:Forespørgsel efter postgres inden for et tidsinterval

Du mister overblikket over dine tidszoner, når du ringer til to_date så gør det ikke:

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

Når du some_date.to_datetime , får du en DateTime-forekomst, der er i UTC, så resultatet af noget som dette:

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

vil have et klokkeslæt på 00:00:00 og en tidszone på UTC; 00:00:00 er det korrekte tidspunkt på dagen i @person.time_zone men ikke rigtigt for UTC (medmindre, selvfølgelig, @person er i +0 tidszonen).

Og du kan forenkle din forespørgsel med overlaps :

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

Bemærk, at overlaps virker med halvåbne intervaller:

Hver tidsperiode anses for at repræsentere det halvåbne interval start <= time < end , medmindre start og slut er ens, i hvilket tilfælde det repræsenterer det enkelte tidsøjeblik.




  1. Sådan fungerer FROM_BASE64()-funktionen i MySQL

  2. Postgres SSL SYSCALL fejl:EOF opdaget med python og psycopg

  3. Evalueringsrækkefølge for Oracle SQL-sætning

  4. GUI-værktøj til PostgreSQL