用于在日期范围之间选择记录的SQL查询

时间:2014-06-30 13:13:27

标签: sql sql-server stored-procedures date-comparison

我正在尝试编写一个基于以下内容选择记录的查询:

  1. 他们应属于特定类别
  2. 它们应该在开始日期和结束日期之间。

    我有以下记录:

    EventId| EventName| Event_Category| Event_StartDate| Event_EndDate|
       1   |  aaa     |     4         |  2014-06-10    |  2014-06-15  |
       2   |  bbb     |     5         |  2014-06-10    |  2014-06-15  |
       3   |  ccc     |     6         |  2014-06-10    |  2014-07-11  |
       4   |  ddd     |     5         |  2014-06-01    |  2014-07-10  |
       5   |  eee     |     5         |  2014-06-10    |  2014-06-014 |
    

    存储过程:

    create proc usp_filterevnts @Categoryid int, @StartDate date, @EndDate date
    as
    begin 
    select * from Events Where Event_Category=@Categoryid  and ( Event_Startdate>@StartDate and Event_Enddate<@EndDate )
    end
    

    如果我执行sp为

      exec usp_filterevnts 5,'2014-06-09','2014-06-16' 
    

    它应显示5Th记录的记录,其开始日期和结束日期在'2014-06-09'和'2014-06-16 ..ie第2记录,第5记录之间。

    我的存储过程是否正确?

2 个答案:

答案 0 :(得分:0)

select * from Events Where Event_Category=@Categoryid and (Event_Startdate between @StartDate and @EndDate) and (Event_Enddate between @StartDate and @EndDate)

答案 1 :(得分:-1)

(取决于表格大小,日期字段是否有索引......)

您的原始语法,但使用&gt; =和&lt; =包含

之间会导致表扫描,如果您的表很小,这将无关紧要。