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 | 5/6/2013 | 5/30/2017 如果用户希望查找在2013年5月1日至2013年5月30日之间通过认证的员工,则应返回员工ID 1、3和5。请注意,虽然FromDate在查询的开始日期5/1/2013之后,但员工id 5在日期范围内经过认证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 |
希望这是有道理的。我正绞尽脑汁思考如何编写查询。假设您的日期确实存储为日期,以下操作应该可以:
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