Sql 查询以查找在某个日期范围内处于活动状态的记录

Sql 查询以查找在某个日期范围内处于活动状态的记录,sql,Sql,我有一个数据库表,其中包含员工证书的开始日期和到期日期。我需要查询该表以获取在某个日期范围内获得认证的员工 示例表: EmpID | from date | 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 |

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

示例表:

EmpID | from date | 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运算符分别提及和添加这两个条件。它将帮助您以更符合逻辑的方式记录查询。

此查询有3种情况

将2013年5月1日视为st_dt 截至2013年5月30日

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);
在此查询中进行某些更改,如表名等。您肯定会得到答案。

您必须选择

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

你忘了把和放在你的问题上:我测试了给出的3个答案,这是唯一一个似乎给出正确结果的答案。谢谢。在您的查询中,EmpID 4也将出现,因为它限定了您的最后一个条件st_dt