Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.09.2010, 16:25
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию 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  
Старый 02.09.2010, 17:13
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Сейчас я в цикле перебираю весь набор дат. Смотрю текущую запись (дата1) и следующую за ней (дата2), проверяя не соответствует ли моя дата (моя_дата) условию дата1<моя_дата<дата2, но хотелось бы реализовать запросом. Вот. Может и не стоит заморачиваться?
Ответить с цитированием
  #3  
Старый 02.09.2010, 17:39
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

попробуй 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  
Старый 02.09.2010, 17:59
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от friz
попробуй beetwean, вроде должно работать с датами

Код:
SELECT * FROM hren
WHERE date
NOT BETWEEN '21.02.2009' AND '22.02.2010'

Не подойдет, мне надо перебрать весь набор дат. Вот, например, интервал дат:
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  
Старый 02.09.2010, 18:21
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

такое можно сделать только в цикле...ну и лично я не знаю как сделать это только в sql можно конечно сделать цикл и на sql.. но разницы особой не будет
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #6  
Старый 06.09.2010, 11:17
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

А что мешает 2-мя запросами это сделать?

например так:
1-й определяем минимальную границу диапазона:
Код:
select max(period)
from table_name
where period<= data
тут получим ближ. начало периода
2-й определяем максимально ближнюю границу диапозона:
Код:
select min(period)
from table_name
where period>= data

получив результат этих двух запросов получим диапазон в котором лежит искомая нами дата.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter