MySQL запрос, чтобы найти, что время между и временем - PullRequest
0 голосов
/ 26 апреля 2018

У меня в таблице from_time и to_time . одна из записей от: время: 19:00:00 и время: 01:30:00 если пользователь выбрал 12:30 или 11:00 . как мне правильно найти, что это между from_time и to_time.

Mysql запрос, который я пытался:

SELECT * FROM `table` WHERE  '19:00:00' >= from_time  and '19:00:00' <= to_time

не работает.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Ваш вопрос не показывает, откуда исходит выбранное время. Это в столбце, это что-то, что пользователь устанавливает в SQL, или это посылается через код?

Если время установлено в SQL, то способ сделать это следующим образом:

SET @mytime := '19:00:00';
SELECT * FROM `table` WHERE CAST(@mytime AS TIME) BETWEEN from_time AND to_time;

где @mytime - переменная, заданная пользователем, и предполагается, что from_time и to_time - формат времени.

Моя тестовая таблица для вышеупомянутого была следующей:

CREATE TABLE `timetest` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `from_time` time DEFAULT NULL,
  `to_time` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

с данными испытаний как:

INSERT INTO `timetest` (`id`, `from_time`, `to_time`) VALUES
(1, '09:00:00', '11:00:00'),
(2, '06:30:00', '14:00:00'),
(3, '14:29:10', '16:12:18'),
(4, '09:11:17', '23:00:01'),
(5, '18:00:00', '23:59:59'),
(6, '01:12:00', '11:59:44');
0 голосов
/ 26 апреля 2018

Для to_times, которые идут более полуночи, вы можете добавить 24 часа и затем протестировать. Например

drop table if exists t;
create table t(from_time time, to_time time);
insert into t values
('18:00:00','20:00:00'),
('18:00:00','01:00:00'),
('16:00:00','18:00:00');



select from_time,to_time,
         case when  '19:00:00' between 
                from_time and
         if(to_time < from_time, 
         addtime(to_time,'24:00:00'),
          to_time) 
          then 'true'
         else 'false'
         end as truefalse
from t;
+-----------+----------+-----------+
| from_time | to_time  | truefalse |
+-----------+----------+-----------+
| 18:00:00  | 20:00:00 | true      |
| 18:00:00  | 01:00:00 | true      |
| 16:00:00  | 18:00:00 | false     |
+-----------+----------+-----------+
3 rows in set (0.00 sec)
0 голосов
/ 26 апреля 2018

Вы использовали значение вместо имени столбца

Вы можете использовать как ниже запрос. Вы можете изменить значение в соответствии с вашими потребностями.

Измените значение времени в соответствии с вашими потребностями.

Первый вариант с Where

SELECT * FROM `table` WHERE  from_time >= '00:00:00'  and to_time <= '23:59:59'  

Второй вариант: between

SELECT * FROM `table` WHERE  from_time between '00:00:00'  and '23:59:59' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...