Oracle选择日期范围内的日期范围

时间:2020-01-28 18:13:19

标签: oracle date select

我有一个具有开始日期和结束日期字段的表。 我希望用户选择一个日期范围并返回该范围内的记录。 我可以编写一些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日,我应该得到简,因为她可能还在那里。

我会很感激你能提供给我的任何线索。我很想在数据库方面做到这一点。

1 个答案:

答案 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');