Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Encontre a próxima vez que o negócio estiver aberto; cálculo de horas mysql


Para descobrir shop_id's, isso está aberto para NOW()
SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(NOW(), '%w')
   AND CURTIME() BETWEEN `open_time` AND `close_time`

Obsoleto :

Para encontrar amanhã está disponível open_time s:
SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%w')

Editar 2:

Para encontrar o próximo open_time disponível s:
  SELECT `shop_id`,
         MIN(CAST(CONCAT(DATE(DATE_ADD(NOW(), INTERVAL ((7 + DATE_FORMAT(NOW(), '%w') - `day_of_week`) % 7) DAY)), ' ', `open_time`) AS DATETIME)) AS `next_open_datetime`
    FROM `shop_hours`
GROUP BY `shop_id`

Editar :

DATE_FORMAT(*DATE*, '%w') usa o formato 0 = Sunday ... 6 = Saturday

Se você quiser usar o formato ISO 1 = Monday ... 7 = Sunday em seu day_of_week campo, você deve vincular o date('N') do php para sua consulta (ou use a função if do Mysql IF(DATE_FORMAT(NOW(), '%w') = 0, 7, DATE_FORMAT(NOW(), '%w')) , mas isso é feio)