2015-11-25 29 views
0

我有以下SQL查询确保将开始和结束日期是在选定范围内

SELECT   
    users.username, users.first_name, users.last_name, users.description, 
    sprints.sprint_start_date, sprints.sprint_end_date, users.user_id 
FROM   
    sprints 
INNER JOIN 
    sprints_vs_users ON sprints.sprint_id = sprints_vs_users.sprint_id 
RIGHT OUTER JOIN 
    users ON sprints_vs_users.user_id = users.user_id 
WHERE  
    (sprints.sprint_start_date BETWEEN CONVERT(datetime, @startdate, 103) 
       AND CONVERT(datetime, @enddate, 103)) 
    AND (sprints.sprint_end_date BETWEEN CONVERT(datetime, @startdate, 103) 
       AND CONVERT(datetime, @enddate, 103)) 

如果我们声明@startdate变量作为26/11/2015和声明@enddate变量作为03/12/2015和如果我们使用的一个例子的27/11/2015一个sprint_start_datesprint_end_date4/12/2015

我想与那些冲刺的开始和结束的日期,冲刺所选变量日期期间发生的冲刺日期出现在结果中。然而目前,查询不显示这个结果,我认为这是因为没有出现在26/11/201503/12/2015之间,虽然我不知道如何解决这个问题,所以任何帮助将不胜感激。

+0

什么数据库是你? Oracle,MySQL,SQL Server,MS? – Walucas

+0

请标记使用的dbms。当涉及到日期/时间时,太多产品与ANSI SQL不兼容。 – jarlh

+0

如果您正在寻找'sprint_start_date'和'sprint_end_date'之间的某些日期在定义的日期范围内(而不是所有的日期都是您的查询现在正在执行的操作),只需使用'OR'而不是'和'。 – SunKnight0

回答

0

您现有的逻辑意味着查询仅返回开始日期和结束日期落在由两个变量(即冲刺的整个持续时间属于期间)限定的时间段内的冲刺。

这听起来像你真正想要的是返回sprint,其中开始日期或结束日期落在定义的时间段内(即,冲刺持续时间完全或部分在定义的时间段内),或者冲刺开始和结束定义的时间段的一侧(即,定义的时间段落在冲刺的持续时间内)。

如果是这样,您可以修改您的查询是这样的:

SELECT   
    users.username, users.first_name, users.last_name, users.description, 
    sprints.sprint_start_date, sprints.sprint_end_date, users.user_id 
FROM   
    sprints 
INNER JOIN 
    sprints_vs_users ON sprints.sprint_id = sprints_vs_users.sprint_id 
RIGHT OUTER JOIN 
    users ON sprints_vs_users.user_id = users.user_id 
WHERE 
( 
    (sprints.sprint_start_date BETWEEN CONVERT(datetime, @startdate, 103) 
       AND CONVERT(datetime, @enddate, 103)) 
    OR 
    (sprints.sprint_end_date BETWEEN CONVERT(datetime, @startdate, 103) 
       AND CONVERT(datetime, @enddate, 103)) 
) 
OR 
(
    (sprints.sprint_start_date <= CONVERT(datetime, @startdate, 103)) 
    AND 
    (sprints.sprint_end_date >= CONVERT(datetime, @enddate, 103)) 
) 
相关问题