sql >> Databasteknik >  >> RDS >> Mysql

Hitta nästa gång verksamheten är öppen; mysql timmar beräkning

För att ta reda på shop_id:s är det öppet för NOW()

SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(NOW(), '%w')
   AND CURTIME() BETWEEN `open_time` AND `close_time`

Föråldrad :

För att hitta i morgon s tillgänglig open_time s:

SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%w')

Redigera 2:

För att hitta nästa tillgängliga open_time 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`

Redigera :

DATE_FORMAT(*DATE*, '%w') använder formatet 0 = Sunday ... 6 = Saturday

Om du vill använda ISO-formatet 1 = Monday ... 7 = Sunday i din day_of_week fältet, bör du binda phps date('N') till din fråga (eller använd Mysqls if-funktion IF(DATE_FORMAT(NOW(), '%w') = 0, 7, DATE_FORMAT(NOW(), '%w')) , men det är fult)



  1. Datetime NU PHP mysql (+ PDO-variant)

  2. Sammanfoga två bord i en MySQL

  3. Benchmark MySQL på SSD:Verktyg och strategier

  4. konvertera blob till clob