PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Rails 3.1:Запитване на Postgres за записи в рамките на времеви диапазон

Губите представа за часовите си зони, когато извикате to_date така че не правете това:

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

Когато some_date.to_datetime , получавате екземпляр DateTime, който е в UTC, така че резултатът е нещо подобно:

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

ще има час от деня 00:00:00 и часова зона UTC; 00:00:00 е правилното време от деня в @person.time_zone но не е подходящ за UTC (освен ако, разбира се, @person е в часовата зона +0).

И бихте могли да опростите заявката си с overlaps :

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

Имайте предвид, че overlaps работи с полуотворени интервали:

Счита се, че всеки период от време представлява полуотворения интервал start <= time < end , освен ако началото и краят не са равни и в този случай представлява този единичен момент от време.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съхранявате масив или множество стойности в една колона

  2. пакет неуспешен - Не мога да намеря клиентската библиотека на PostgreSQL (libpq)

  3. Как да промените локала при форматиране на числа в PostgreSQL

  4. Как да напиша ограничение относно максимален брой редове в postgresql?

  5. Как да напишете заявка, нечувствителна към главните букви и за MySQL, и за Postgres?