我有一个任务,我需要每个月生成一次报告,让我们说每个月的第1天。我尝试过多种方式,但每次我需要修改查询以获取特定月份的数据。
我使用以下查询来获取11月的数据:
Select * from user
where m_termination_dt>(sysdate-30) and m_termination_dt<(sysdate).
它提供了正确的输出。(我在12月1日运行此查询,因此减去30天)。值得关注的是,11月有30天的工作时间。对于Dec,我必须减去31天而不是30天,这又是人类的参与。那么有什么办法可以在不改变查询的情况下编写查询。
任何人都可以帮助我使用通用查询,以便我可以在我的系统中自动执行该查询。
西
答案 0 :(得分:1)
Add_months(trunc(sysdate, 'month'), -1)
给出了上个月的第一天。 Trunc(sysdate, 'month')
表示当月的第一天。
因此,如果您运行此查询,您将获得上个月的数据,这与它有多少天无关:
select * from users
where add_months(trunc(sysdate, 'month'), -1) <= m_termination_dt
and m_termination_dt < trunc(sysdate, 'month')
示例:
create table users (id number(5), m_termination_dt date);
insert into users values (1, date '2015-11-01');
insert into users values (2, date '2015-11-18');
insert into users values (3, date '2015-11-30');
insert into users values (4, date '2015-12-01');
commit;
查询输出:
ID M_TERMINATION_DT
------ ----------------
1 2015-11-01
2 2015-11-18
3 2015-11-30