Если вы хотите получить список дней, с SQL, например
, выберите ... в качестве дней, где date
находится между '2010-01-20' и '2010-01-24'
И возвращать данные типа:
days
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24
В этом решении не используются циклы, процедуры или временные таблицы.Подзапрос генерирует даты за последнюю тысячу дней и может быть расширен для того, чтобы идти так далеко назад или вперед, как вы хотите.
select a.Date
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) a
where a.Date between '2010-01-20' and '2010-01-24'
Вывод:
Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20
Замечания по производительности
Тестирование здесь , производительность на удивление хорошая: приведенный выше запрос занимает 0,0009 сек.
Если мы расширим подзапрос для генерации прибл.100 000 чисел (и, следовательно, около 274 лет), он работает за 0,0458 с.
Кстати, это очень переносимый метод, который работает с большинством баз данных с небольшими изменениями.