我有一个具有开始日期和结束日期字段的表。 我希望用户选择一个日期范围并返回该范围内的记录。 我可以编写一些Java代码来做到这一点,但是在Oracle select中有没有办法做到这一点? 更糟糕的是,结束日期可能很模糊……我可能知道他今天住在这里,但我不确定下周。
例如,当“名称”位于“地址”时,我有一个名称,地址和日期的列表(所有日期均为日期数据类型)
name address moved in moved out known end date?
jack 123 main st 1/1/2015 12/31/2015 Y
jill 123 main st 1/1/2016 12/31/2016 Y
jeff 123 main st 1/1/2017 12/31/2017 Y
jane 123 main st 1/1/2018 12/31/2018 N (she may still be there)
因此,如果我从6/1/15到6/1/16进行查询,则应该得到jack和jill。从6/1/17到7/1/17,我应该得到jeff。对于20年1月28日,我应该得到简,因为她可能还在那里。
我会很感激你能提供给我的任何线索。我很想在数据库方面做到这一点。
答案 0 :(得分:0)
基本上是迈克尔·布劳顿说的话:
create table addr (name varchar2(10), address varchar2(20), moved_in date, moved_out date, known_end_date varchar2(1));
insert into addr values ('jack','123 main st',date '2015-01-01',date '2015-12-31','Y');
insert into addr values ('jill','123 main st',date '2016-01-01',date '2016-12-31','Y');
insert into addr values ('jeff','123 main st',date '2017-01-01',date '2017-12-31','Y');
insert into addr values ('jane','123 main st',date '2018-01-01',date '2018-12-31','N');
select *
from addr
where moved_in <= to_date(:end_date, 'MM/DD/YYYY')
and (moved_out >= to_date(:start_date, 'MM/DD/YYYY') or known_end_date = 'N');