Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL podzielony według przedziałów czasowych

Potrzebujesz źródła danych ze wszystkimi czasami, które chcesz zwrócić. Następnie możesz użyć operacji JOIN, aby wybrać wiersze do zwrócenia.

Gdybyś miał taki stół:

CREATE TABLE cal (tm TIME NOT NULL PRIMARY KEY) ENGINE=InnoDB ;
INSERT INTO cal (tm)  VALUES ('00:00:00'),('00:30:00');
INSERT INTO cal (tm) SELECT ADDTIME(tm,'01:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'02:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'04:00:00') FROM cal;
... 

Następnie możesz użyć tego w zapytaniu:

SELECT v.id
     , c.tm
  FROM myview v
  JOIN cal c
    ON c.tm >= v.hour_from
   AND c.tm <= v.hour_to
 ORDER BY v.id, c.tm

Jeśli chcesz, aby wartości czasu były w określonym formacie, możesz użyć DATE_FORMAT funkcja:

SELECT v.id
     , DATE_FORMAT(c.tm,'%H:%i') AS hour_

Zakłada się, że wartości zwracane przez widok to TIME typ danych. Jeśli nie, będziesz chciał ich nawrócić. (Lub możesz uzyskać ten sam wynik, pracując z ciągami znaków w formacie kanonicznym.)

UWAGA:Posiadanie stołu nie jest obowiązkowe; może to być dowolne źródło wiersza, takie jak widok wbudowany. Potrzebujesz tylko wystarczającej liczby wierszy (w twoim przypadku przy założeniu, że półgodzinne przyrosty od 00:00 do 23:30, czyli 48 wierszy).

Jeśli masz jakiekolwiek zakresy czasu, które „przekraczają” granicę północy (np. od 22:00 do 02:00), przykładowe zapytanie nie zwróci żadnych wierszy. Musisz wprowadzić poprawki.

Coś takiego:

 JOIN cal c
   ON ( t.hour_from <= t.hour_to 
      AND c.tm >= v.hour_from
      AND c.tm <= v.hour_to
      )
   OR ( t.hour_from > t.hour_to 
      AND (   c.tm <= v.hour_from
          OR  c.tm >= v.hour_to
          )
      )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pobrać wyniki jako wielowymiarową tablicę z mySQL i PHP?

  2. Zapytanie o aktualną datę w czasie mysql

  3. MySQL wyłącza wszystkie wyzwalacze

  4. Czy mogę użyć funkcji dla wartości domyślnej w MySql?

  5. SQL w klauzuli od zera do wielu parametrów