Sql 在选择查询中获取上一周的日期
下面是我在Cognos中用于报告的查询。从星期一到星期天,我每周都在周一做报告 目前,这个日期是硬编码的,但我想让它成为动态的,这样每当我在周一运行这个报告时,我就不必更改前一周的日期 我是否可以在select查询中使用类似sysdate的东西使Sql 在选择查询中获取上一周的日期,sql,oracle,date,select,difference-between-rows,Sql,Oracle,Date,Select,Difference Between Rows,下面是我在Cognos中用于报告的查询。从星期一到星期天,我每周都在周一做报告 目前,这个日期是硬编码的,但我想让它成为动态的,这样每当我在周一运行这个报告时,我就不必更改前一周的日期 我是否可以在select查询中使用类似sysdate的东西使DAY\u DATE动态化 select ID,NAME,DAY_DATE from TEST_REPORT WHERE DAY_DATE BETWEEN to_date ('20170904', 'YYYYMMDD') and to_da
DAY\u DATE
动态化
select ID,NAME,DAY_DATE
from TEST_REPORT
WHERE DAY_DATE BETWEEN to_date ('20170904', 'YYYYMMDD') and to_date ('20170910', 'YYYYMMDD');
您可以使用函数从当前日期计算上一周的开始和结束日期。
假设您在星期一
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
WHERE DAY_DATE>= trunc( trunc( sysdate, 'IW' ) - 1, 'IW')
and DAY_DATE < trunc( sysdate, 'IW' )
要计算前一周的开始日期,请从上述日期中减去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
因此,在您的查询中,只需使用以下子句(date>=上一周的开始和<上一周的开始):
其中DAY\u DATE>=trunc(trunc(sysdate,'IW')-1,'IW'))
和日期
请参阅