【问题标题】:get previous week date in select query在选择查询中获取前一周日期
【发布时间】:2018-02-19 08:53:12
【问题描述】:

我有以下用于在 Cognos 中报告的查询。从周一到周日,我每周都在每周一做报告。

目前这个日期是硬编码的,但我想让它动态化,这样每次我在星期一运行这个报告时,我都不必更改前一周的日期。

我是否可以在选择查询中使用 sysdate 之类的东西使 DAY_DATE 动态化?

select ID,NAME,DAY_DATE      
from TEST_REPORT 
WHERE DAY_DATE BETWEEN to_date ('20170904', 'YYYYMMDD') and to_date ('20170910', 'YYYYMMDD');

【问题讨论】:

标签: sql oracle date select difference-between-rows


【解决方案1】:

您可以使用TRUNC (date) 函数从当前日期计算上一周的开始和结束日期。

假设您在星期一 2017-09-11 和星期五 2017-09-15 运行查询,并且查询必须始终生成前一周的报告。
此查询计算当前周的开始日期:

SELECT trunc( date '2017-09-11', 'IW' ) as x,
       trunc( date '2017-09-15', 'IW' ) as y
from dual;

X                Y               
---------------- ----------------
2017/09/11 00:00 2017/09/11 00:00

要计算前一周的开始日期,请从上述日期中减去 1 天,然后再次使用 TRUCT:

SELECT trunc( trunc( date '2017-09-11', 'IW' ) - 1, 'IW') as start_last_week,
       trunc( trunc( date '2017-09-15', 'IW' )  - 1, 'IW') as start_last_week1
from dual;

START_LAST_WEEK  START_LAST_WEEK1
---------------- ----------------
2017/09/04 00:00 2017/09/04 00:00

因此,在您的查询中只需使用此子句(日期 >= 比上一周的开始和

WHERE DAY_DATE>= trunc( trunc( sysdate, 'IW' )  - 1, 'IW') 
  and DAY_DATE < trunc( sysdate, 'IW' )

【讨论】:

    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 2017-09-16
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2011-04-14
    相关资源
    最近更新 更多