我有一个包含任务的表,每个任务都有一个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'但是它没有返回正确的结果,而且使用间隔也不起作用,因为我需要考虑这两个字段(date_start和date_finish),而不仅仅是其中一个字段。
我认为这可能只是我需要的查询的地方部分。
发布于 2014-07-22 16:28:45
你犯了一个简单的错误,你弄错了操作员的顺序:
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‘。
演示
发布于 2014-07-22 16:12:45
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')https://stackoverflow.com/questions/24892388
复制相似问题