DB2存储过程动态计算每月的天数

时间:2014-10-16 03:32:06

标签: stored-procedures db2 days

如何编写DB2存储过程来计算DPM逻辑。

例如,2014年1月1日至2014年9月30日期间,将显示9条记录(每月一条记录)。对于每条记录,DPM(每月的天数)需要在运行时计算,动态并在公式中更新:

select (((dpm*24) / 2400) * 123) / dpm 
from xxx-table 
where date between '2014-09-01' and '2014-01-01'

如何确保在上述公式中更新正确的DPM

预期输出

Jan - (((31*24) / 2400) * 123) / 31
Feb -(((28*24) / 2400) * 123) / 28
March - (((31*24) / 2400) * 123) / 31
April - (((30*24) / 2400) * 123) / 30
May - (((31*24) / 2400) * 123) / 31
June - (((30*24) / 2400) * 123) / 30
July - (((31*24) / 2400) * 123) / 31
August - (((31*24) / 2400) * 123) / 31
September - (((30*24) / 2400) * 123) / 30

1 个答案:

答案 0 :(得分:0)

正如@mustaccio所说,你的公式总是简化为1.23,通过将第一个dpm乘以第一个分数“out”:

(dpm *(24/2400)* 123)/ dpm

然后,dpm相互取消,只剩下

(24/2400)* 123

这是常数1.23


但是,如果您确实需要每月计算一天,则可以使用递归查询来构建月份列表,然后使用LAST_DAY结合DAY标量函数。我假设您正在使用DB2 for Linux / Unix / Windows,我认为{9}中添加了LAST_DAY

WITH DATES (DTE, LVL) AS (
    SELECT CAST(@beginDate AS DATE), 0
    FROM SYSIBM.SYSDUMMY1
        UNION ALL
    SELECT DTE + 1 MONTHS, LVL +1
    FROM SYSIBM.SYSDUMMY1, DATES
    WHERE DTE + 1 MONTHS <= @endDate
)

SELECT DAY(LAST_DAY(DTE))
FROM DATES