Как искать записи в MySQL, используя StartTime (varchar) и EndTime (varchar)? - PullRequest
0 голосов
/ 20 сентября 2019

Здесь у меня есть несколько записей, я хочу искать записи с 8:30 до 9:30.

Screenshot of phpmyadmin

Я пробовал этот запрос, но не работал:

select * from table_name where '8:30 AM' BETWEEN start_time and end_time OR '9:30 AM' BETWEEN start_time and end_time

select *
from time_test
where STR_TO_DATE(start_time, '%h:%i %p') BETWEEN STR_TO_DATE('08:30 AM', '%h:%i %p') AND STR_TO_DATE('09:30 AM', '%h:%i %p')
    OR STR_TO_DATE(end_time, '%h:%i %p') BETWEEN STR_TO_DATE('08:30 AM', '%h:%i %p') AND STR_TO_DATE('09:30 AM', '%h:%i %p')

Вот таблица sql:

DROP TABLE IF EXISTS `time_test`;
CREATE TABLE IF NOT EXISTS `time_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `start_time` varchar(20) NOT NULL,
  `end_time` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

INSERT INTO `time_test` (`id`, `name`, `start_time`, `end_time`) VALUES
(1, 'R1', '8:00 AM', '9:00 AM'),
(2, 'R2', '9:00 AM', '10:00 AM'),
(3, 'R1', '8:00', '9:00'),
(4, 'R2', '9:00', '10:00'),
(5, 'R2', '1:00 PM ', '2:00 PM'),
(6, 'R2', '13:00 ', '14:00'),
(7, 'R1', '8:00 PM', '9:00 PM'),
(8, 'R1', '8:30 AM', '9:30 AM');

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

Вы можете использовать функцию DATE () .В моем примере используется DATETIME.Можно попробовать с вашими database записями.

SELECT `yourdatabase`
  FROM `yourtable`
 WHERE DATETIME(`yourcolumn`) = '2019-06-17 08:30'

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

  WHERE `yourcolumn` 
BETWEEN '2019-06-17 08:30:00'
    AND '2019-06-17 09:30:00'

Вы можете проверить ЗДЕСЬ для получения подробной информации иличитать ЭТО .

0 голосов
/ 20 сентября 2019

, поскольку вы не сохраняете данные в формате DATETIME, чтобы выбрать записи в диапазоне от 8:30 до 9:30, вы можете использовать STR_TO_DATE:

select *
from table_name
where (STR_TO_DATE(start_time, '%h:%i %p') BETWEEN STR_TO_DATE('08:30 AM', '%h:%i %p') AND STR_TO_DATE('09:30 AM', '%h:%i %p'))
    AND (STR_TO_DATE(end_time, '%h:%i %p') BETWEEN STR_TO_DATE('08:30 AM', '%h:%i %p') AND STR_TO_DATE('09:30 AM', '%h:%i %p'))

Чтобы также выбрать записи, находящиеся вне диапазона 8:30 и 9:30:

select *
from table_name
where (STR_TO_DATE(start_time, '%h:%i %p') BETWEEN STR_TO_DATE('08:30 AM', '%h:%i %p') AND STR_TO_DATE('09:30 AM', '%h:%i %p'))
    OR (STR_TO_DATE(end_time, '%h:%i %p') BETWEEN STR_TO_DATE('08:30 AM', '%h:%i %p') AND STR_TO_DATE('09:30 AM', '%h:%i %p'))
0 голосов
/ 20 сентября 2019

Вы можете преобразовать в минуты и добавить, где условия: Посмотреть пример:

SELECT *
FROM my_table 
WHERE 
    ( 
        HOUR(start_time ) * 60 + MINUTE(start_time) >= HOUR('8:30 AM' ) * 60 + MINUTE('8:30 AM')
        AND 
        HOUR(start_time ) * 60 + MINUTE(start_time) <= HOUR('9:30 AM' ) * 60 + MINUTE('9:30 AM')
    )
    OR 
    ( 
        HOUR(end_time ) * 60 + MINUTE(end_time) >= HOUR('8:30 AM' ) * 60 + MINUTE('8:30 AM')
        AND 
        HOUR(end_time) * 60 + MINUTE(end_time) <= HOUR('9:30 AM' ) * 60 + MINUTE('9:30 AM')
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...