|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
SQL для промежутков дат
Подскажите как определить попадает ли дата в один из "открытых" интервалов дат?
Например есть даты в таблице: 1.01.2010 1.04.2010 1.08.2010 1.12.2010 и есть наша дата в другой таблице - 11.04.2010. дата 11.04.2010 попадает в интервал 1.04.2010 - 1.08.2010 (т.е. 1.04.2010<11.04.2010<1.08.2010) Если есть такое совпадение, то возвращаем 1, если нет-0. Поможет кто с SQL запросом? База на FireBird. |
#2
|
||||
|
||||
Сейчас я в цикле перебираю весь набор дат. Смотрю текущую запись (дата1) и следующую за ней (дата2), проверяя не соответствует ли моя дата (моя_дата) условию дата1<моя_дата<дата2, но хотелось бы реализовать запросом. Вот. Может и не стоит заморачиваться?
|
#3
|
||||
|
||||
попробуй beetwean, вроде должно работать с датами
Код:
SELECT * FROM hren WHERE date BETWEEN '21.02.2009' AND '22.02.2010' да и вообще а что мешало сделать так? Код:
SELECT * FROM hren WHERE date>'21.02.2009' AND date<'22.02.2010 Последний раз редактировалось Admin, Сегодня в 10:32. Последний раз редактировалось friz, 02.09.2010 в 17:46. |
#4
|
||||
|
||||
Цитата:
Не подойдет, мне надо перебрать весь набор дат. Вот, например, интервал дат: 1.01.2010 1.04.2010 1.08.2010 1.12.2010 моя дата (11.04.2010) попадает в интервал 1.04.2010-1.08.2010. Так вот, мне надо проверить существует ли такой интервал в который моя дата попадает. Т.е. проверить: 1.01.2010<11.04.2010<1.04.2010 - не верно 1.04.2010<11.04.2010<1.08.2010 - верно 1.08.2010<11.04.2010<1.12.2010 - не верно 1.12.2010<11.04.2010<null - не верно кроме как гнать в цикле ничего не придумалось, так вот вопрос состоит в том, что может есть фишка в SQL которая из всего набора дат найдет верный интервал? |
#5
|
||||
|
||||
такое можно сделать только в цикле...ну и лично я не знаю как сделать это только в sql можно конечно сделать цикл и на sql.. но разницы особой не будет
Последний раз редактировалось Admin, Сегодня в 10:32. |
#6
|
|||
|
|||
А что мешает 2-мя запросами это сделать?
например так: 1-й определяем минимальную границу диапазона: Код:
select max(period) from table_name where period<= data 2-й определяем максимально ближнюю границу диапозона: Код:
select min(period) from table_name where period>= data получив результат этих двух запросов получим диапазон в котором лежит искомая нами дата. Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |