Estoy tratando de almacenar en el horario de apertura del sitio de Postgres, después de leer este enlace logré encontrar esta tabla
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 );Tengo un problema ahora que algunas tiendas abren entre las 6 a. m. y la 1 a. m. del día siguiente.
Como el campo de time está limitado a 24:00:00 , podría agregar una nueva fila a la misma tabla para las horas restantes, por ejemplo:
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' ...Pero eso parece ser demasiado complicado.
Otra solución es crear esta tabla:
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 );y llene la tabla con dicho contenido:
store_id,day_of_the_week,open_time,operating_minutes 1,0,'06:00:00',500 1,1,'06:00:00',500 ... Sin embargo, esta consulta haría que la consulta para determinar si una tienda está abierta now() sea un poco más difícil, ya que necesitaría considerar casos específicos al consultar, en última instancia, lo que me gustaría consultar es:
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()) Otra cosa que estaba considerando es que siempre estoy almacenando datos para cada tienda sin importar si están abiertas o no, pero para algunos de los informes, necesito filtrar los eventos dentro del rango de tiempo definido en mi tabla opening_hours .
Estoy buscando consejos sobre cuál sería la forma preferida de almacenar estos datos en Postgres.
Puede consultar una tienda abierta con esta lógica:
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) Esto usa between y not between por simplicidad. Sin embargo, es posible que no manejen los horarios exactos de apertura y cierre de la manera que usted desea (¿estos horarios específicos están incluidos o no?).