Здравствуйте, Johnmen, Вы писали:
J>SELECT id_order FROM rorder WHERE <время заказа> NOT BETWEEN begin_time AND end_time
Это понятно, но нето. (всёравно спасибо за ответ)
Промежутки могут пересекаться как слева так и справа, т.е. раньше начинаться , позже заканчиваться. Такие тоже надо проверять.
Здравствуйте, Dmitry Pyatkov, Вы писали:
J>>SELECT id_order FROM rorder WHERE <время заказа> NOT BETWEEN begin_time AND end_time
SELECT id_order FROM rorder WHERE (<начальная дата> BETWEEN begin_time AND end_time)
or (<конечная дата> BETWEEN begin_time AND end_time)
Здравствуйте, KGP, Вы писали:
KGP>SELECT id_order FROM rorder WHERE (<начальная дата> BETWEEN begin_time AND end_time) KGP> or (<конечная дата> BETWEEN begin_time AND end_time)
Да так оно так, да не так.
В смысле временой промежуток может наченаться раньше проверяемого и кончаться позже.
Здравствуйте, Dmitry Pyatkov, Вы писали:
DP>Здравствуйте, KGP, Вы писали:
KGP>>SELECT id_order FROM rorder WHERE (<начальная дата> BETWEEN begin_time AND end_time) KGP>> or (<конечная дата> BETWEEN begin_time AND end_time)
DP>Да так оно так, да не так. DP>В смысле временой промежуток может наченаться раньше проверяемого и кончаться позже.
Ты ж скажи, что тебе надо-то, по русски! У тебя есть dt_Start и dt_End.
Какие ордера должны стать результатом выполнения запроса? Никак не задевающие указанный интервал? Или только не лежащие в нем целиком?
Здравствуйте, g_i, Вы писали:
g_i>Ты ж скажи, что тебе надо-то, по русски! У тебя есть dt_Start и dt_End. g_i>Какие ордера должны стать результатом выполнения запроса? Никак не задевающие указанный интервал? Или только не лежащие в нем целиком?
Здравствуйте, Dmitry Pyatkov, Вы писали:
g_i>>Какие ордера должны стать результатом выполнения запроса? Никак не задевающие указанный интервал? Или только не лежащие в нем целиком?
DP>Ни как не входящие в промежеток.
Вхождение — это когда лежит в интервале целиком, не выходя за его границы.
И еще раз уточняем. Условиям удовлетворяют ордера срок действия которых никак не пересекается с искомым интервалом или все-же не лежащие в этом интервале целиком?.
Давай на примере. Интервал (01.01.2004;10.01.2004)
ордер 1 (01.01.2004;05.01.2004)
ордер 2 (01.01.2004;15.01.2004)
ордер 3 (30.12.2003;15.01.2004)
ордер 4 (12.01.2004;15.01.2004)
Какие из этих ордеров удовлетворяеют твоим условиям (должны быть в результатах запроса?
Здравствуйте, g_i, Вы писали:
DP>>Ни как не входящие в промежеток. g_i>Вхождение — это когда лежит в интервале целиком, не выходя за его границы. g_i>И еще раз уточняем. Условиям удовлетворяют ордера срок действия которых никак не пересекается с искомым интервалом или все-же не лежащие в этом интервале целиком?.
Нужно вывести всех кто частично касается либо полностью входит в интервал.
g_i>Давай на примере. Интервал (01.01.2004;10.01.2004) g_i>ордер 1 (01.01.2004;05.01.2004)
выводим g_i>ордер 2 (01.01.2004;15.01.2004)
выводим g_i>ордер 3 (30.12.2003;15.01.2004)
выводим g_i>ордер 4 (12.01.2004;15.01.2004)
не выводим g_i>Какие из этих ордеров удовлетворяеют твоим условиям (должны быть в результатах запроса?
Здравствуйте, Dmitry Pyatkov, Вы писали:
DP>Нужно вывести всех кто частично касается либо полностью входит в интервал.
g_i>>Давай на примере. Интервал (01.01.2004;10.01.2004) g_i>>ордер 1 (01.01.2004;05.01.2004) DP>выводим g_i>>ордер 2 (01.01.2004;15.01.2004) DP>выводим g_i>>ордер 3 (30.12.2003;15.01.2004) DP>выводим g_i>>ордер 4 (12.01.2004;15.01.2004) DP>не выводим
Если гарантируется, что end_time >= begin_time, тогда
SELECT id_order FROM rorder WHERE NOT (end_tyme < :DT_START OR begin_time > :DT_END)
Здравствуйте, g_i, Вы писали:
g_i>Если гарантируется, что end_time >= begin_time, тогда
Да гарантируется g_i>SELECT id_order FROM rorder WHERE NOT (end_tyme < :DT_START OR begin_time > :DT_END)
СУПЕР! Вот блин как я сам не додумался!
Здравствуйте, Dmitry Pyatkov, Вы писали:
DP>Здравствуйте, KGP, Вы писали:
KGP>>SELECT id_order FROM rorder WHERE (<начальная дата> BETWEEN begin_time AND end_time) KGP>> or (<конечная дата> BETWEEN begin_time AND end_time)
DP>Да так оно так, да не так. DP>В смысле временой промежуток может наченаться раньше проверяемого и кончаться позже.
Похоже, что вот так:
SELECT id_order
FROM rorder
WHERE <начальная дата> = begin_time OR <конечная дата> = end_time OR
(<начальная дата> BETWEEN begin_time AND end_time) OR
(<конечная дата> BETWEEN begin_time AND end_time) OR
(begin_time BETWEEN <начальная дата> AND <конечная дата>) OR
(end_time BETWEEN <начальная дата> AND <конечная дата>)
Собственно у меня была вот такая задачка: узнать, какие комнаты заняты на определенный промежуток времени. Решалась она вот как (MSSQL):
select roomID
from roomBookings
where @df=dateFrom or @dt=dateTo or (@df between dateFrom and dateTo) or
(@dt between dateFrom and dateTo) or (dateFrom between @df and @dt) or
(dateTo between @df and @dt)
Я правильно понял условие?
... << RSDN@Home 1.1.0 stable >>
С уважением,
Леченко Павел
SDPM.RU — Сообщество Менеджеров Проектов Разработки Программного Обеспечения
P_L>SELECT id_order
P_L>FROM rorder
P_L>WHERE <начальная дата> = begin_time OR <конечная дата> = end_time OR
P_L> (<начальная дата> BETWEEN begin_time AND end_time) OR
P_L> (<конечная дата> BETWEEN begin_time AND end_time) OR
P_L> (begin_time BETWEEN <начальная дата> AND <конечная дата>) OR
P_L> (end_time BETWEEN <начальная дата> AND <конечная дата>)
P_L>
Тогда уж лучше так
SELECT id_order
FROM rorder
WHERE NOT (
(<начальная дата> < begin_time AND <конечная дата> < begin_time) OR
(<начальная дата> > time AND <конечная дата> > end_time)
)