Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

98
Visualizações
Storing open hours for a site in Postgres

I am trying to store on Postgres site opening hours, after reading this link I managed to come up with this table

create table opening_hours 
 (
    store_id  int REFERENCES site (id) NOT NULL,
    day_of_the_week integer NOT NULL,
    open_time    time with time zone not NULL,
    close_time   time with time zone not NULL
);

I am having a problem now that some stores are open between 6 AM and 1 AM on the following day.

As the time field is limited to 24:00:00 I could add a new row to the same table for the remaining hours e.g:

store_id,day_of_the_week,open_time,close_time
1,0,'06:00:00','24:00:00'
1,1,'00:00:00','01:00:00'
1,1,'06:00:00','24:00:00'
...

But that just seems to be too convoluted.

Another solution is to create this table:

create table opening_hours 
 (
    store_id  int REFERENCES site (id) NOT NULL,
    day_of_the_week integer NOT NULL,
    open_time    time with time zone not NULL,
    operating_minutes   integer not NULL
);

and populate the table with such content:

store_id,day_of_the_week,open_time,operating_minutes
1,0,'06:00:00',500
1,1,'06:00:00',500
...

However, this query would make the query to determine if a store is now() open a bit more difficult as I would need to consider specific cases when querying, ultimately what I would like to query is:

select (localtime > open_time and localtime < close_time) from opening_hours oh  where store_id = 1 and day_of_the_week = date_part('dow', now())

Another thing that I was considering is that I am always storing data for every store no matter if they are open or not, but for some of the reports, I need to filter out the events within the time range defined on my table opening_hours.

I'm looking for advice on what would be the preferred way of storing this data into Postgres.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

You can query for an open store with this logic:

where (open_time < close_time and localtime between open_time and close_time) or
      (open_time > close_time and localtime not between open_time and close_time)

This uses between and not between for simplicity. However, they may not handle the exact opening and closing times the way you want (are those specific times included or not?).

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda