如何在db2中查找从上月28日到本月27日的天数

如何在db2中查找从上月28日到本月27日的天数,db2,Db2,我需要在每个月28日生成一份报告。 因此,我需要运行autosys作业。 因为我有一个条件查询 验证日期>=(自上次运行以来的天数) 您能在这方面帮助我吗?我如何在DB2中实现这个条件? 这是一项每月的工作。因此我不想在查询中硬编码我的上一次运行日期。同时,我需要获得所有月份都满足的条件 注: 如果查询在2月28日运行,则不包括2月28日。我需要从1月28日(含)到2月27日(含)的数据 同样,对于3月28日的运行,我需要获取从2月28日(包括)到3月27日(包括)的数据…提前感谢。请帮助您可以

我需要在每个月28日生成一份报告。 因此,我需要运行autosys作业。 因为我有一个条件查询 验证日期>=(自上次运行以来的天数) 您能在这方面帮助我吗?我如何在DB2中实现这个条件? 这是一项每月的工作。因此我不想在查询中硬编码我的上一次运行日期。同时,我需要获得所有月份都满足的条件

注: 如果查询在2月28日运行,则不包括2月28日。我需要从1月28日(含)到2月27日(含)的数据 同样,对于3月28日的运行,我需要获取从2月28日(包括)到3月27日(包括)的数据…提前感谢。请帮助

您可以使用DAY()函数从日期中提取月日,并可以使用它触发作业。例如,其中天(参数)=28。 其他两个参数可以通过日期计算来计算,这里是触发器的示例,date_to value和date_from value

select day(timestamp_format(20170228,'yyyyMMdd') ),timestamp_format(20170228,'yyyyMMdd')- 1 DAY,timestamp_format(20170228,'yyyyMMdd')  -1 month from sysibm.sysdummy1; 

如果参数/列是日期/时间戳,则可以删除时间戳格式(20170228,'yyyyymmdd')函数,只需将列/参数放入一个过程中,并对开始和结束日期进行参数化。

换言之,可以这样做:

create procedure monthly_report(
    start_date date,
    end_date   date
)
language sql
begin

   ... report queries here ...

end
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
    )
)
现在,您可能有了更灵活的功能(取决于报表要求)。如果将来您希望在不同的日期或不同的时间段运行报告,您将能够这样做

这样设计之后,在作业调度脚本中设置日期可能比在SQL中设置日期更容易。如果在SQL中执行此操作,则可以执行以下操作:

create procedure monthly_report(
    start_date date,
    end_date   date
)
language sql
begin

   ... report queries here ...

end
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日运行会发生什么,如果是,如何处理)。但是您得到了基本的方法。

您尝试了哪种查询?您的日期/时间/时间戳查询应该始终是(使用