Boipelo Ответов: 4

Sql: выбор между двумя датами ( дата начала и дата окончания)


Я не знаю, где разместить этот вопрос, но также надеюсь, что сформулировал его правильно.

Мне нужна помощь с sql, история ниже:

У меня есть таблица с датой начала и окончания, включая время(например, расписание). Он прекрасно работает. У меня есть проблемы, конфликты.

Допустим, у меня есть sql-таблица со следующей информацией informa:
Дата Начала: Дата Окончания
23 марта 2012 года 10:00 вечера 23 марта 2012 года 11:00 вечера
23 марта 2012 года 14:00 23 марта 2012 года 16:00
23 марта 2012 года 17:00 23 марта 2012 года 18:00

Я хочу добавить событие без конфликта – вот где проблема!

Предположим, что новое событие имеет ту же дату начала, но время с 12:00 до 15:00
Я ожидаю конфликта, так как время окончания (15:00) перекрывает 14:00 (второй ряд)

Вот что я сделал
Я проверил, существует ли дата начала, например
….
Где StartDate = @StartDate

…результаты
23 марта 2012 года 14:00 23 марта 2012 года 16:00
23 марта 2012 года 17:00 23 марта 2012 года 18:00


Если я расширяюсь проверяя если дата окончания не между любыми датами
Где StartDate = @ StartDate
И ((конечная дата между @ StartDate и @enddate или enddate = @ enddate В или enddate &ГТ;@ Дата окончания))

Это работает, но будет иметь еще одну проблему, когда StartDate находится между событием, скажем, 15 вечера. Я уже несколько часов пытаюсь решить эту проблему...

Вот процедура, которую я написал, но все еще не могу избежать некоторых дубликатов:
SELECT * FROM MyTable
  WHERE StartDate = @StartDate
    AND ((@EndDate BETWEEN StartDate AND EndDate OR EndDate = @EndDate OR EndDate > @EndDate))


Заранее поблагодарив вас, я погуглил возможные решения и не могу найти ни одного, которое было бы ближе к моему.

Boipelo

Позвольте мне кое-что прояснить… Я использую select, потому что хочу проверить, есть ли какие-либо строки перед сохранением.

Member 11811228

мне нужно кодирование во всех трех то есть jsp,html и sql для вызова shar fire в одной программе

Boipelo

Решение 1-это ваш ответ. Jsp не нужен.

4 Ответов

Рейтинг:
30

Saral S Stalin

Попробуйте ниже и дайте мне знать, если это работает для вашего требования.

SELECT * FROM MyTable
  WHERE ((StartDate > @StartDate AND EndDate < @StartDate) -- Starts within an already used time slot
    OR 
(StartDate < @EndDate AND EndDate > @EndDate))-- Ends within an already used time slot


Boipelo

Спасибо, что нашли время помочь мне, я опубликовал окончательное решение.

Saral S Stalin

Никаких проблем, братан... рад помочь :)

Рейтинг:
24

Boipelo

@Saral S Stalin, спасибо за вашу помощь... ваше решение работает с этими незначительными корректировками

SELECT * FROM MyTable
 WHERE ((StartDate <= @StartDate AND EndDate > @StartDate) -- Included the start date to avoid duplicates start date and also changed the '>' to '<' after AND, it was not within
  OR 
  (StartDate < @EndDate AND EndDate >= @EndDate))-- The range was perfect, I just included the EndDate so that we dont have events ending at the same time.

Еще раз спасибо за ваше решение... ты дал мне направление.


Рейтинг:
2

Member 13758233

select * from tbl where (endDate >= @starDate and startDate <= @endDate)


CHill60

Внимательно прочитайте вопрос. Ваш плохо отформатированный, раскомментированный пост не дает решения заявленной проблемы. Правильное решение см. в решении 2

Member 13758233

Я сформировал решение, и оно протестировано и работает отлично.

Richard MacCutchan

Кроме того, если вы читали вопрос и существующие решения, то это было решено более восьми лет назад. Пожалуйста, попробуйте придерживаться текущих открытых вопросов.

Рейтинг:
17

KrishanGahlot

Simple & clean demonstration goto
http://csharpdemos.blogspot.in/2012/09/how-to-select-all-dates-between-two.html