我有一个包含任务的表,每个任务都有一个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部分。
答案 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 强>