具有start_date和end_date的行需要返回落在日期范围内的记录

时间:2014-07-22 16:06:45

标签: mysql sql

我有一个包含任务的表,每个任务都有一个date_start和date_finish字段。

我需要构造一个查询,该查询将接受传入日期并返回所有行,如果在日期中传递的日期落在date_start和date_finish之间。

这有意义吗?

我一直在尝试使用标准的日期类型查询,例如:

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

但它没有返回正确的结果,并且使用BETWEEN也不起作用,因为我需要它来考虑两个字段(date_start和date_finish)而不仅仅是那个字段。

我认为它可能只是我需要的查询的WHERE部分。

2 个答案:

答案 0 :(得分:0)

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')

答案 1 :(得分:0)

你犯了一个简单的错误,你的操作员的顺序错了:

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

<强>解释

如果检查的日期在date_start和date_finish之间,那么我们必须到达最后的开始日期。我们也可以约会。这意味着

date_start will be lower or equal than the date checked

第二张支票说:结束日期已经过去了。所以

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

使用原始查询,您只能获得以“2013-10-10”开头和结尾的项目。

<强> Demo