sql >> Database >  >> RDS >> Mysql

MySQL-openingstijden

Als u de tabel niet kunt wijzigen, kunt u deze zoekopdracht gebruiken:

SELECT COUNT(*) 
FROM opening_hrs
WHERE (((100*HOUR(NOW())+MINUTE(NOW()) >= openTime) 
        AND (100*HOUR(NOW())+MINUTE(NOW()) <= closeTime + 2400*(closeDay-openDay)))
       OR 
       ((100*HOUR(NOW())+MINUTE(NOW()) >= openTime - 2400*(closeDay-openDay)) 
        AND (100*HOUR(NOW())+MINUTE(NOW()) <= closeTime )))
AND openDay = 1

Als u de tabel kunt aanpassen zodat deze er als volgt uitziet:

+---------+----------+-----------+
|     day | openTime | closeTime |
+---------+----------+-----------+
|       0 | 1800     |  2400     |
|       1 | 1800     |  2400     |
|       2 | 1800     |  2400     |
|       3 | 1800     |  2400     |
|       4 | 1800     |  2400     |
|       5 | 1800     |  2400     |
|       6 | 1800     |  2400     |
|       0 |    0     |   400     |
|       1 |    0     |   400     |
|       2 |    0     |   400     |
|       3 |    0     |   400     |
|       4 |    0     |   400     |
|       5 |    0     |   400     |
|       6 |    0     |   400     |
+---------+----------+-----------+

dan zou je de query als volgt kunnen uitvoeren:

SELECT COUNT(*) 
FROM opening_hrs
WHERE (100*HOUR(NOW())+MINUTE(NOW()) >= openTime) 
AND (100*HOUR(NOW())+MINUTE(NOW()) <= closeTime)
AND day = 1

Merk op dat er geen openDay en closeDay meer zijn; slechts een day column.Merk ook op dat de openTime is altijd kleiner dan de closeTime , zodat de ongelijkheden in de zoekopdracht kunnen werken.



  1. DML-statements testen voor In-Memory OLTP

  2. Anonimiseren van indirecte identifiers om het risico op heridentificatie te verlagen

  3. Hoe weet u of een berekende kolom deterministisch is in SQL Server?

  4. MySQL-back-up- en herstelopdrachten voor databasebeheer