Приветствую всех! Имеем таблицу: Код: CREATE TABLE `a_test` ( `id` int(5) NOT NULL, `date_start` date NOT NULL, `date_end` date NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Дамп данных таблицы `a_test` -- INSERT INTO `a_test` (`id`, `date_start`, `date_end`) VALUES (1, '2017-01-15', '2017-02-15'), (2, '2017-01-01', '2017-02-28'), (3, '2017-03-01', '2017-05-15'), (4, '2017-02-05', '2017-05-15'), (5, '2017-08-15', '2017-09-15'), (6, '2017-08-05', '2017-10-12'), (7, '2018-08-15', '2018-10-01'), (8, '2018-12-25', '2019-01-25'); Как из этой таблицы получить все строки текущая дата в которых находится между date_start и date_end, но без учета года? Т.е. мне нужно получить все строки, в которых, например дата находится между 2 мая и 15 мая любого года. --- Добавлено, 28 сен 2018 --- Короче, я так подумал - если сначала вытащить месяц и день из даты, а результат превратить в число, то можно сравнивать числа. Например, '2017-01-15' и '2017-02-15' == '01-15' и '02-15', получим 115 и 215, можно сравнивать. Проблема только, если месяц первой даты будет больше месяца второй даты. Например, '2018-12-25' и '2019-01-25' == '12-25' и '01-25', получим 1225 и 125. Но если поставить условие при котором месяц первой даты больше месяца второй даты, то ко второму числу нужно прибавить 1200. Тогда получим, 1225 и 1325. В-общем, ничего умнее я пока не придумал: Код: SELECT * FROM `a_test` WHERE date_format(curdate(), '%m%d')+0 BETWEEN date_format(date_start, '%m%d')+0 AND if((date_end>date_start) AND (month(date_start)>month(date_end)), date_format(date_end, '%m%d')+1200,date_format(date_end, '%m%d')+0) Может у кого есть решение по изящнее?
В MySQL есть функция DAYOFYEAR, которая позволяет получить номер дня в году из даты. А дальше нужно просто сравнивать их.
Большое спасибо! Запрос чуть упростился Код: SELECT * FROM `a_test` WHERE DAYOFYEAR(curdate()) BETWEEN DAYOFYEAR(date_start) AND if((date_end>date_start) AND (month(date_start)>month(date_end)), DAYOFYEAR(date_end)+366, DAYOFYEAR(date_end)) (Если вдруг кому пригодится!)