我有一个数据库表,其中包含员工认证的开始和过期日期。我需要查询表格,以获得在日期范围内获得认证的员工。
示例表:
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.请注意,员工ID 5在日期范围内已经过认证FromDate位于查询的开始日期之后(2013年5月1日)。
希望这是有道理的。我很难围绕如何编写查询。
答案 0 :(得分:1)
假设您的日期确实存储为日期,则以下内容应该有效:
select t.*
from t
where FromDate <= '5/30/2013' and
EndDate >= '5/1/2013';
逻辑是FromDate
小于句点的结尾,EndDate
在开头之后。这将与期间有任何重叠。
答案 1 :(得分:0)
查询将是:
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)
这里两个条件都单独提及并使用或运算符添加。它将帮助您以更合理的方式写下您的查询。
答案 2 :(得分:0)
看起来此查询有3种情况。
将2013年5月1日视为st_dt 和5/30/2013 as 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);
在此查询中进行某些更改,例如表名等。您肯定会得到答案。
答案 3 :(得分:0)
你必须选择
SELECT EmpId FROM tableName WHERE FromDate <= endDateRange AND
ExpireDate>=startDateRange