如何从不同范围的日期字段中选择日期范围

时间:2017-06-19 20:17:36

标签: sql oracle date select

我想为另一个日期范围内的日期范围选择数据

我有下表

ID  FNAME  LNAME  BEG_EPISODE_DT  END_EPISODE_DT    TRGT_DT
 1  John    G        12/20/16        02/11/17       03/31/17
 2  King    R        11/10/16        12/25/17       03/31/17
 3  Bundt   H        10/19/16        01/16/17       03/31/17
 4  Smith   F        02/16/16        04/08/17       03/31/17

以上数据显示每个人的剧集。剧集是指从一集(BEG_EPISODE_DT)开始到结束(END_EPISODE_DT)的持续时间

我需要选择数据,使每个人的剧集位于目标日期(TRGT_DT)之前的3个月内,即剧集(BEG_EPISODE_DT或END_EPISODE_DT)应位于03/31/17至3个月之前

我正在尝试使用以下逻辑。但我无法让它工作

select * from mytable 
BEG_EPISODE_DT between ((ADD_MONTHS(TRGT_DT,-3), TRGT_DT) or 
END_EPISODE_DT between ((ADD_MONTHS(TRGT_DT,-3), TRGT_DT) or 
BEG_EPISODE_DT = (ADD_MONTHS(TRGT_DT,-3) or TRGT_DT) or
END_EPISODE_DT = (ADD_MONTHS(TRGT_DT,-3) or TRGT_DT)

我正在寻找以下结果

ID  FNAME  LNAME  BEG_EPISODE_DT  END_EPISODE_DT    TRGT_DT
 1  John    G        12/20/16        02/11/17       03/31/17
 3  Bundt   H        10/19/16        01/16/17       03/31/17
 4  Smith   F        02/16/16        04/08/17       03/31/17

感谢您的帮助

编辑:BEG_EPISODE_DT或END_EPISODE_DT可以等于TRGT_DT或(TRGT_DT - 3个月)

1 个答案:

答案 0 :(得分:0)

您缺少WHERE子句的关键字WHERE。除此之外,BETWEEN语法更简单。类似的东西:

where    beg_episode_dt between add_months(trgt_dt, -3) and trgt_dt
      or end_episode_dt between add_months(trgt_dt, -3) and trgt_dt