SQL - 排除某些时间段

时间:2013-03-08 11:04:03

标签: sql db2

您好我有一张包含以下字段的表格:

person
from_dt
to_dt
house_num

它描述了一个人居住的门牌号,并给出了from_dt和to_dt。 from_dt日期回到2000-01-01,to_dt日期回到2012-01-01

问题:

我想只选择那些在2004年至2009年期间生活过一段时间的人。

即排除喜欢

的人
person  from_dt     to_dt       house_num
-----------------------------------------
dave    2000-01-01  2002-01-01  34

然而请保持一个人:

person  from_dt     to_dt       house_num
-----------------------------------------
susan   2008-01-01  2009-06-01  93

我在这里遇到了逻辑问题。有没有人有任何关于如何使用from_dt和to_dt的建议,只包括2009年在一所房子里住了一天或更长时间的人?

非常感谢。

1 个答案:

答案 0 :(得分:1)

没有经过测试可能会有拼写错误,但这里有想法 - 从必须在范围内或必须在范围内,或者必须在之前和之后开始。

select * 
from table
where (year(from_dt) < 2009 and year(from_dt) > 2004) 
   or (year(to_dt) < 2009 and year(to_date) > 2004)
   or (year(from_dt) < 2004) and year(to_date) > 2009)

你也可以在之前或之后测试NOT。

select *
from table
where not ((year(from_date) < 2004 and year(to_dt) < 2004)
         or(year(from_date) > 2009 and year(to_dt) > 2009))

或(正如尼古拉指出的那样)

select * 
from table
where year(from_dt) <= 2009 and year(to_dt) >= 2004