Если вы хотите получить список дней, с 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
Заметки о производительности
Тестирование его here, производительность на удивление хорошо: выше запрос занимает 0,0009 сек.
Если мы расширим подзапрос, чтобы сгенерировать ок. 100 000 номеров (и, следовательно, даты на 274 года), она работает в 0,0458 сек.
Кстати, это очень переносная техника, которая работает с большинством баз данных с небольшими корректировками.
Непонятно, что вы просите. В чем проблема, с которой вы сталкиваетесь? Вы спрашиваете, можете ли вы запросить все таблицы во всех базах данных или спросите, можете ли вы запросить таблицу с именем «система»? Второй пример должен работать нормально. Первый пример не будет работать, как вы думаете, это два фрагмента текста, а не даты. Вам нужно будет хранить даты в правильном формате. – Tom
Я думаю, что они означают простые запросы для получения списков дат или цифр между заданными диапазонами, на лету. – MartW
@Tom: Я предполагаю, что он запрашивает 'generate_series'. – Quassnoi