【问题标题】:Sql query for selecting records in between Date range用于在日期范围内选择记录的 Sql 查询
【发布时间】:2014-06-30 23:12:34
【问题描述】:

我正在尝试编写一个查询以根据以下条件选择记录:

  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 as

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

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

    我的存储过程是否正确?

【问题讨论】:

  • 查找BETWEEN 子句。您在存储过程中而不只是在查询中这样做是否有特殊原因?
  • 如何使用 BETWEEN 子句检查两个日期?使用“和”??
  • 请看答案。

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


【解决方案1】:
select * from Events Where Event_Category=@Categoryid and (Event_Startdate between @StartDate and @EndDate) and (Event_Enddate between @StartDate and @EndDate)

【讨论】:

    【解决方案2】:

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

    您的原始语法,但要包含 >= 和

    Between 会导致表扫描,如果您的表很小,这不会有太大影响。

    【讨论】:

    • 运算符本身不会导致表扫描。仅当日期列上没有索引或表太小以至于使用索引无济于事时,才会发生表扫描。实际上,BETWEEN&gt;= &lt;= 都会导致相同的包含范围查询
    猜你喜欢
    • 1970-01-01
    • 2019-04-10
    • 2018-06-01
    • 2014-10-04
    • 1970-01-01
    • 2014-05-26
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多