简体   繁体   中英

Rows with a start_date and end_date, need to return records that fall within a date range

I have a table that contains tasks, each task has a date_start and date_finish field.

I need to construct a query which will take a passed in date and return all rows if that passed in date falls between the date_start and date_finish.

Does this make sense?

I have been trying to use standard date type querys such as:

SELECT *
FROM project_task
WHERE project_task.date_start >= '2013-10-10' AND project_task.date_finish <= '2013-10-10'

but it doesn't return the correct results and using BETWEEN does not work either because I need it to take into account both fields (date_start and date_finish) not just the one.

I think it may only be the WHERE part of the query I need.

DECLARE @Now datetime = '2013-10-10T00:00:00'

SELECT *
FROM project_task a
WHERE @Now >= a.Date_Start
AND @Now < isnull(a.Date_Finish, '9999-12-31T00:00:00')

You've made a simple mistake, you got the order of your operators wrong:

SELECT *
FROM project_task
WHERE 
    project_task.date_start <= '2013-10-10'      -- start should before the test date
AND 
    project_task.date_finish >= '2013-10-10'     -- and finish after the test date

Explanation

If the date checked is between date_start and date_finish, then we must have reached at last the start date. We could have a later date too. That means the

date_start will be lower or equal than the date checked

And the second check said: the finish date musn't have passed. So

date_finish has to be greater or equal than the date checked.

With your original query you will only get projects that start and end on '2013-10-10'.

Demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM