Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL, разделен по времеви диапазон

Имате нужда от източник на редове с всички времена, които искате да бъдат върнати. След това можете да използвате операция JOIN, за да изберете редовете, които да бъдат върнати.

Ако имахте таблица като тази:

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;
... 

Тогава можете да използвате това в заявката си:

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

Ако искате стойностите за време в определен формат, можете да използвате DATE_FORMAT функция:

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

Това предполага, че стойностите, върнати от изгледа, са TIME тип данни. Ако не са, ще искате да ги конвертирате. (Или можете да получите същия резултат, работейки със символни низове в каноничен формат.)

ЗАБЕЛЕЖКА:Не е задължително да имате маса; може да бъде произволен източник на ред, като например вграден изглед. Нуждаете се само от достатъчно редове (във вашия случай, ако приемем половинчасови стъпки от 00:00 до 23:30, това са 48 реда.)

Ако имате часови диапазони, които „пресичат“ среднощна граница (напр. 22:00 до 02:00), примерната заявка няма да върне нито един ред. Ще трябва да направите корекции.

Нещо като:

 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. Как да изчислим текущото общо в MySQL

  2. SQL как да извадите резултатен ред 1 от ред 2, ред 2 от ред 3

  3. MySQL - намерете разликата между редовете на една и съща таблица

  4. Как мога да видя съдържанието на подготвено изявление?

  5. Използване на Like в MySQL за операции за търсене с помощта на шаблон