【问题标题】:Oracle select date range within date rangeOracle 在日期范围内选择日期范围
【发布时间】:2020-01-28 18:13:19
【问题描述】:

我有一个包含开始日期和结束日期字段的表格。 我希望用户选择一个日期范围并返回该范围内的记录。 我可以编写一些 Java 代码来做到这一点,但是有没有办法在 Oracle 选择中做到这一点? 更糟糕的是,结束日期可能很模糊......我可能知道他今天住在那里,但我不确定下周。

例如,我有一个名称、地址和日期列表,当“名称”位于“地址”时(所有日期都是日期数据类型)

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)

所以如果我从 2015 年 6 月 1 日到 2016 年 6 月 1 日查询,我应该得到杰克和吉尔。对于 2017 年 6 月 1 日到 17 年 7 月 1 日,我应该得到杰夫。 20 年 1 月 28 日我应该去找简,因为她可能还在。

如果您能提供任何线索,我将不胜感激。我很想在数据库端这样做。

【问题讨论】:

  • moved inmoved out的数据类型是什么?
  • 似乎一个日期范围应该有范围内的最高日期 >=moved_in,或范围内的最低日期

标签: oracle date select


【解决方案1】:

基本上是迈克尔·布劳顿所说的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多