我需要在每月28日生成一份报告。 所以我需要运行一个autosys工作。 在那我有一个查询条件 validation_date> =(自上次运行以来的天数) 你能帮我解决这个问题。如何在DB2中实现这个条件? 这是一个月工作。所以我不想在查询中硬编码我以前的运行日期。同时我需要得到满足所有月份的条件。
注意: 如果查询在2月28日运行,则不包括feb 28th。我需要从1月28日(包括)获取数据,直到2月27日(包括在内) 同样对于3月28日运行,我需要从2月28日(包括)获取数据直到3月27日(包括在内)...提前致谢。请帮助
答案 0 :(得分:1)
考虑将您的报告生成放在一个过程中,并参数化开始日期和结束日期。换句话说,有类似这样的内容:
create procedure monthly_report(
start_date date,
end_date date
)
language sql
begin
... report queries here ...
end
现在您可能拥有更灵活的东西(取决于报告要求)。如果您将来希望在不同的一天或不同的时间内运行报告,您将能够做到这一点。
以这种方式设计后,在作业调度脚本中设置日期可能更容易,而不是在SQL中。如果你在SQL中做到了,你可以这样做:
call monthly_report(
(select
year(current timestamp - 2 months) ||'-'||
month(current timestamp - 2 months) ||'-'||
'28' from sysibm.sysdummy1
),
(select
year(current timestamp - 1 month) ||'-'||
month(current timestamp - 1 month) ||'-'||
'27' from sysibm.sysdummy1
)
)
你可能需要调整它来处理一些边缘情况(我不确定你是否关心如果它在本月29日运行会发生什么,如果是的话,如何处理它)。但是你得到了基本的方法。
答案 1 :(得分:0)
您可以使用DAY()函数从日期中提取日期,并将其用于触发作业。例如,day(param)= 28。 其他两个参数可以通过日期计算来计算,这里是触发器,date_to值和date_from值
的示例select day(timestamp_format(20170228,'yyyyMMdd') ),timestamp_format(20170228,'yyyyMMdd')- 1 DAY,timestamp_format(20170228,'yyyyMMdd') -1 month from sysibm.sysdummy1;
如果你的参数/列是日期/时间戳,你可以删除timestamp_format(20170228,'yyyyMMdd')函数并只放你的列/参数