0

我正在尝试按今天的月份和之前的 6 个月过滤查询。我想将该查询安排在一个时间表中,以便每月运行一次。这应该使实际和 6 之前的每个月都发生变化。我正在使用 db2。

现在我的 where 子句中有这样的内容(对于 6 个月前): (date>= TIMESTAMP ('2012-07-01-00.00.00.00') 和 date<= TIMESTAMP ('2013-1-1-00.00') .00.00'))

有没有办法获得今天的第一天和前 6 个月的时间戳?

谢谢

4

1 回答 1

2

这有点笨拙,但你可以做这样的事情。DB2 并没有很好的机制来声明存储过程之外的变量。我也添加了LAST_DAY一点,只是为了方便/参考。

WITH 

THIS_MONTH(FIRST_DAY, LAST_DAY) AS (
    SELECT TIMESTAMP_ISO(
        CURRENT_DATE - (DAY(CURRENT_DATE) - 1) DAYS
    ),
    TIMESTAMP_ISO(
        CURRENT_DATE - (DAY(CURRENT_DATE) - 1) DAYS 
    ) + 1 MONTH - 1 MICROSECOND
    FROM SYSIBM.SYSDUMMY1
),

SIX_MONTHS_AGO(FIRST_DAY, LAST_DAY) AS (
    SELECT FIRST_DAY - 6 MONTHS,
           (FIRST_DAY - 6 MONTHS) + 1 MONTH - 1 MICROSECOND
    FROM THIS_MONTH
)

SELECT *
FROM YOUR_TABLE
WHERE UPDATE_TIMESTAMP BETWEEN 
    (SELECT FIRST_DAY FROM SIX_MONTHS_AGO)
    AND
    (SELECT FIRST_DAY FROM THIS_MONTH)
于 2013-01-30T21:52:31.770 回答