SQL Server在两个日期之间查找记录

时间:2013-07-30 15:09:15

标签: sql

让我解释一下,我有一份员工名单,说明他们实际工作的时间。我有另一张桌子,给我一段时间,开始和那段时间的结束日期。我想要一个将需要一天工作的查询并找到它所处的时间段。

table 1

David  05/10/2013
Peter  05/16/2013

table 2
Period_Num         Begin_Period         End_Period
Period 1            01/05/2013        05/15/2013
Period 2            05/16/2013        12/31/2013

我希望决赛能够阅读:

David      Period 1
Peter      Period 2

有没有办法在sql中执行此操作,特别是在视图中?

谢谢!

3 个答案:

答案 0 :(得分:2)

这样的东西
select t1.Name, t2.Period_Num
from table1 as t1
    left outer join table2 as t2 on t1.date between t2.Begin_Period and T2.End_Period

你应该小心,因为如果table2中的句点重叠,你的记录可能会重复。例如,如果您的数据是:

table 1

David  05/10/2013
Peter  05/16/2013

table 2
Period_Num         Begin_Period         End_Period
Period 1             01/05/2013         05/15/2013
Period 2             05/16/2013         12/31/2013
Period 3             03/08/2013         08/10/2013

你会收到

David      Period 1
Peter      Period 2
David      Period 3 <- DUPLICATE

答案 1 :(得分:0)

试试这个

select Table1.Name,Table2.periodNum from Table1 join Table2 on Table1.period between Table2.Begin_Period and Table2.End_Period

答案 2 :(得分:0)

为了避免在table1中没有相应句点的情况下从table1中丢失名称,您可以尝试这样的事情:

select t1.Name, isnull(t2.Period_Num,'n/a')
from table1 t1
left outer join table2 t2 on t1.worked between t2.Begin_Period and t2.End_Period