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

Posted

技术标签:

【中文标题】如何在db2中查找从上个月28日到本月27日的天数【英文标题】:how to find number of days since 28th of last month till 27th of current month in db2 【发布时间】:2017-05-15 05:55:26 【问题描述】:

我需要在每个月的 28 日生成一份报告。 所以为此我需要运行一个 autosys 作业。 在那我有一个条件查询 validation_date >=(自上次运行以来的天数) 你能帮我解决这个问题吗?我怎样才能在 DB2 中实现这个条件? 这是一个每月的工作。所以我不想在查询中硬编码我以前的运行日期。同时我需要得到一个满足所有月份的条件。

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

【问题讨论】:

您尝试了哪个查询? 您的日期/时间/时间戳查询应始终为upper-bound exclusive(使用<)。在这种情况下,说“今天之前”、< CURRENT_DATE(或其他一些表示实际结束日期的东西)。请注意,这会自动使更高分辨率的时间戳变得安全。 【参考方案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 日运行会发生什么,如果是,如何处理)。但是你得到了基本的方法。

【讨论】:

【参考方案2】:

您可以使用 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') 函数并只输入您的列/参数

【讨论】:

以上是关于如何在db2中查找从上个月28日到本月27日的天数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 postgresql 将每月 26 日到下个月 25 日的数据分组?

php日历模块的运算逻辑求解!如何求日期对应的星期几!

excel怎么从文本格式中提取出,月份的天数呢?

在EXCEL中,今天到下个月今天的天数怎么计算,求教了

SQL Count 天数到本月的第一天

PHP下获取上个月、下个月、本月的日期