2014-02-13 8 views
0

Я работаю над проектом asp.net. У меня есть две даты, хранящиеся в базе данных для вакансии. Дата публикации и дата окончания. Я хочу, чтобы, если пользователь ищет любую вакансию с диапазоном дат, то, если дата начала или конечная дата вакансии попадает в этот диапазон, тогда она должна быть выбрана. Например, если пользователь выбирает диапазон дат с 10 марта по 10 апреля, а дата начала вакансии - MAchch 1, а крайняя дата - 20 марта, тогда это должно быть shwon.sql server критерии диапазона дат

фиктивная SQL

select * 
from vacancies v 
where v.start date in date range or 
     v. end date in date range 

Что будет SQL для этого

+0

Вы пытались использовать МЕСЯЦ? – Steve

ответ

0

Если вы понимаете, что дата начала и сроки просто сформировать другой диапазон, то это просто запрос, чтобы найти все перекрывается между указанный пользователем диапазон и вакансии диапазоны:

declare @StartRange datetime 
declare @EndRange datetime 
select @StartRange='20140310',@EndRange='20140410' 

select 
    * 
from vacancies v 
where v.startdate <= @EndRange and 
     @StartRange <= v.deadline 

(Это может потребоваться корректировки для <= или < в зависимости от того, у ou рассмотрите любой диапазон, чтобы иметь инклюзивные или эксклюзивные конечные точки).

Основная логика - два диапазона перекрываются, если первый диапазон начинается до окончания второго, и второй диапазон начинается до первого конца.

Это также подбирает, например, вакансий, которые имеют дату начала до указанный пользователем диапазон и дату окончания после указанный пользователем диапазон. Это не совпадает с фиктивной SQL, но обычно желательно (то есть вакансия открыта в течение пользователя указанного диапазона)

0

Вы хотите сделать что-то вроде:

SELECT * 
FROM Vacancies v 
WHERE v.StartDate Between @UserProvidedStartDate and @UserProvidedEndDate 
    OR v.EndDate Between @UserProvidedStartDate and @UserProvidedEndDate 

Это предполагает, что вы имеете параметры, прошел с критериями поиска пользователей.

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

SELECT * 
FROM Vacancies v 
WHERE v.EndDate Between @UserProvidedStartDate and @UserProvidedEndDate 
Смежные вопросы