用于在两个日期之间进行选择的SQL查询

时间:2014-07-11 13:18:17

标签: sql sql-server

请帮助我在两个日期之间选择节目。

要求是开始日期和结束日期将分为两列。应根据它们之间的范围记录进行选择。

让我们举一个真实的例子..

Example output

日期分为两个:StartDateEndDate

如果我想选择7月10日之间的比赛和7月14日,我可以写一个像这样的查询:

SELECT * FROM tblMatch 
WHERE (StartDate BETWEEN '7/9/14' AND '7/13/14' ) 
and (EndDate BETWEEN '7/9/14' AND '7/13/14')

但如果指定范围内有错误,我需要根据StartDate或End Date选择正确的匹配。

如果用户搜索:

                 StartDate:7/10/14    -- 10 July 2014
                 EndDate: 7/15/14     -- 15 July 2014
                       or
                 StartDate:7/8/14     -- 8 July 2014
                 EndDate: 7/14/14     -- 14 July 2014

然后应该选择在我的情况下首先匹配的范围之间的匹配!!

UPDATE 我的StartDate和EndDate只是Sql Date数据类型......所以请在考虑转换问题之前先考虑一下......

根据范围,应选择它们之间的事件。

3 个答案:

答案 0 :(得分:1)

请参阅日期格式详情:Date format URL

-- 101 is forma "mm/dd/yy":

select * from tblMatch 
where (CONVERT(VARCHAR(8),StartDate,101) between '07/09/14' and '07/13/14' ) 
and (CONVERT(VARCHAR(8),EndDate,101) between '07/09/14' and '07/13/14')

答案 1 :(得分:0)

DECLARE @StartDate1 DATETIME = 7/10/14;
DECLARE @EndDate1 DATETIME = 7/15/14;

DECLARE @StartDate2 DATETIME = 7/8/14;
DECLARE @EndDate2 DATETIME = 7/14/14;

SELECT * FROM tblMatch
WHERE (StartDate > @StartDate1 AND EndDate < @EndDate1) OR (StartDate > @StartDate2 AND EndDate < @EndDate2);

答案 2 :(得分:0)

select * from tblMatch 
where (CONVERT(VARCHAR(10),StartDate,110) between '12/01/14' and '12/31/14' ) 
and (CONVERT(VARCHAR(10),EndDate,110) between '12/01/14' and '12/31/14')

此处的日期格式为"MM/dd/yyyy"