查询以查找在日期范围内活动的记录



我有一个数据库表,其中包含员工证书的开始日期和到期日期。我需要查询该表以获取在某个日期范围内认证的员工。

示例表:

  EmpID  |   FromDate  |  ExpireDate
---------+-------------+--------------
    1    |   2/1/2011  |    3/1/2015
    2    |  10/1/2010  |    2/1/2013
    3    |   3/1/2013  |   5/30/2013
    4    |  11/1/2000  |    3/1/2012
    5    |   5/6/2013  |   5/30/2017

如果用户想要查找在2013年5月1日到2013年5月30日之间认证的员工,他们应该返回员工id 1,3和5。请注意,虽然FromDate在查询的开始日期(5/1/2013)之后,但雇员id 5是在日期范围内认证的。

希望这有意义。

我很难理解如何编写这个查询。

假设您的日期确实被存储为日期,那么以下操作应该可以工作:

select t.*
from t
where FromDate <= '5/30/2013' and
      EndDate >= '5/1/2013';

逻辑是FromDate小于周期的末尾,而EndDate在周期的开始之后。这样就不会和句号重叠了

查询将为:

declare @FromDate datetime
declare @ToDate datetime
set @FromDate = '1-May-2013'
set @ToDate = '30-May-2013'
select * from emp
where (@FromDate <= FromDate And @ToDate > FromDate And @ToDate < ExpireDate)   
    Or (@FromDate >= FromDate And  @ToDate between FromDate and ExpireDate)

在这里,这两个条件分别提到并使用or操作符添加。它将帮助您以更合乎逻辑的方式写下查询。

你必须选择

SELECT EmpId FROM tableName  WHERE FromDate <= endDateRange AND
ExpireDate>=startDateRange

看起来这个查询有3个场景。

考虑5/1/2013为st_dt2013年5月30日为end_dt

Select EmpID from tablename WHERE
(st_dt > FromDate AND end_dt < ExpireDate) OR
(st_dt > FromDate AND end_dt > ExpireDate) OR
(st_dt < FromDate AND end_dt < ExpireDate);

在这个查询中做一些修改,比如表名等。你肯定会得到答案的。

最新更新