2013-12-10 3 views
0

В PostgreSQL мне нужен способ определить, находится ли текущее время в пределах часов работы определенной модели с отметкой opens_at и closees_at. Что было бы правильным способом Postgres сделать это.Сравните только время двух временных меток в postgres

Для sqlite3 я имел:

     (opens_at > closes_at AND 
         (TIME(opens_at) > :now OR :now < TIME(closes_at))) 
         OR 
         (closes_at > opens_at AND 
         (TIME(opens_at) < :now AND TIME(closes_at) > :now)) 

Я забыл упомянуть это работает через ActiveRecord так :now фактически равно текущему времени UTC.

ответ

1

Вероятно, проще всего сделать это, чтобы отливать timestamp с до time с и использовать localtime:

opens_at::time > localtime or localtime < closes_at::time 
... 

Rails будет иметь все в UTC внутри базы данных (в том числе подключение к базе данных), так что вы не приходится беспокоиться о проблемах с часовым поясом.

+0

будет выдавать «время», чтобы гарантировать, что учитывается только время суток **, а не ** дата. Меня не волнует дата, просто время. – OneChillDude

+0

Из тонкого руководства: ["' время: время суток (нет даты) "] (http://www.postgresql.org/docs/current/interactive/datatype-datetime.html#DATATYPE-DATETIME-TABLE) , –

+0

Вы раздавите его. Благодаря! – OneChillDude

Смежные вопросы