0

嗨,我有一个包含以下字段的表格:

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 年期间住在房子里一天或更长时间的人有任何建议?

非常感谢。

4

1 回答 1

1

未经测试,因此可能有拼写错误,但这是一个想法 - from 必须在范围内或 to 必须在范围内,或者它们必须在之前开始和之后结束。

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
于 2013-03-08T11:09:35.127 回答