Execute esta consulta de horas de operação no PostgreSQL

Estou na pilha do RoR e precisei escrever um SQL real para concluir esta consulta para todos os registros "abertos", o que significa que o horário atual está dentro do horário especificado de operação. Nohours_of_operations mesa doisinteger colunasopens_on ecloses_on armazenar um dia da semana e doistime Camposopens_at ecloses_at armazene a respectiva hora do dia.

Eu fiz uma consulta que compara a data e hora atuais com os valores armazenados, mas estou me perguntando se existe uma maneira de transmitir para algum tipo de tipo de data e o PostgreSQL faça o resto?

A carne da consulta é:

WHERE (
 (

 /* Opens in Future */
 (opens_on > 5 OR (opens_on = 5 AND opens_at::time > '2014-03-01 00:27:25.851655'))
 AND (
 (closes_on < opens_on AND closes_on > 5)
 OR ((closes_on = opens_on)
 AND (closes_at::time < opens_at::time AND closes_at::time > '2014-03-01 00:27:25.851655'))
 OR ((closes_on = 5)
 AND (closes_at::time > '2014-03-01 00:27:25.851655' AND closes_at::time < opens_at::time)))
 OR

 /* Opens in Past */
 (opens_on < 5 OR (opens_on = 5 AND opens_at::time < '2014-03-01 00:27:25.851655'))
 AND
 (closes_on > 5)
 OR
 ((closes_on = 5)
 AND (closes_at::time > '2014-03-01 00:27:25.851655'))
 OR (closes_on < opens_on)
 OR ((closes_on = opens_on)
 AND (closes_at::time < opens_at::time))
 )

 )

A razão para uma complexidade tão densa é que uma hora de operação pode terminar no final da semana, por exemplo, começando ao meio-dia do domingo e passando às 6 da manhã de segunda-feira. Como eu armazeno valores no UTC, há muitos casos em que a hora local do usuário pode ser alterada de uma maneira muito estranha. A consulta acima garante que você pode digitar QUALQUER duas vezes da semana e compensamos o empacotamento.

questionAnswers(1)

yourAnswerToTheQuestion