Да, простите, напутал! Это не ваш запрос пропустил, а наоборот запрос сверху пропустил её, а ваш — поймал!
Спасибо! А как вы оцените скорость такого запроса? Не будет он пистолетом для мускуля?
Спасибо за ответ. С 2х прочтений пока не до конца врубился :-) Чуть чуть попозже буду пытаться вникать
Но пока могу вот, что сказать интересного: в самом первом ответе мы общими усилиями собрали здоровенный запрос, которые уже успели назвать пистолетом для мускуля, но он находит, вроде правильно. Ваш запрос находит почти тоже самое, не считая одной записи. Вот такую ваш запрос пропустил:
06.02.2012 09:30 — begin
07.02.2012 01:20 — end
простите, что не в формате мускуля даты, а в ДД.ММ.ГГГГ
jowee, да, у меня уже, благодаря вашим подсказкам всем получилось нечто подобное, я чуть выше накидал, что вышло. По вашему варианту, вот тут:
((CAST(`start` AS DATE) = CAST(`end` AS DATE)) AND (CAST(start AS TIME) < '16:00') AND (CAST(end AS TIME) > '16:00'))
вроде необязательно делать проверку, что даты одинаковые. Т.е. если
(CAST(start AS TIME) < '16:00') AND (CAST(end AS TIME) > '16:00')
выполнено, то так и так запись подходит, вроде.
Третье условия — просто ппц :-) Как вы не запутались? Я сперва подумал, что вы закончили сообщение смайлами :-)))) А это скобки. ПО подсказкам Betal, вроде третье условие поменьше. Посмотрите и вы его, пожалуйста, вдруг найдете что-то не то. (чуть выше в пред. ответе)
Betal, спасибо! Получилось вот такая штукенция (благодаря еще jowee): SELECT * FROM table WHERE
('16:00:00' between CAST(startDT AS TIME) and CAST(endDT AS TIME)) OR (TIMESTAMPDIFF(DAY, startDT, endDT ) >= 1) OR
(CAST(endDT AS TIME) >= '16:00:00' AND CAST(startDT AS TIME)>=CAST(endDT AS TIME))
поправки в вашем условии что везде больше/меньше либо равно
Да, вы правы, у запроса из ответа снизу как раз проблема с разными датами т.к. там идет учет только времени.
А сделать такой флаг в самой БД — не вариант т.к. нужны будут выборки не только с 16:00, но и с любым другим временем суток…
Спасибо за ответ!
Работает почти всегда, но к сожалению почти…
вот такой вариант не найдет, например:
01-01-2012 21:00; 02-01-2012 22:00
т.к. если рассматривать только время, то 16:00 не было, но если учесть, что прошли сутки — то 16:00 случалось.
А разве можно сравнивать вот так? Ведь у меня нет отдельно столбца «время», там время с датой.
т.е., например запрос start< '16:00' не вернет ничего, вроде, поскольку start — еще и дата…