DB2 使用标记的持续时间对多个日期间隔无效

DB2 use of labeled duration not valid with multiple date intervals

我正在尝试在 DB2/iSeries 上将 MySQL 查询重构为 运行,但出现错误使用标记持续时间无效。

查看文档,我觉得下面的用法应该有效。

我是不是漏掉了什么?

SELECT
    IFNULL(SUM(CASE WHEN CURDATE() BETWEEN n.start_date AND n.expire_date
                    THEN 1 ELSE 0 END), 0) AS current,
    IFNULL(SUM(CASE WHEN CURDATE() -  365 DAY BETWEEN n.start_date AND n.expire_date
                    THEN 1 ELSE 0 END), 0) AS prior,
    IFNULL(SUM(CASE WHEN '2018-12-31' -  7 DAY BETWEEN n.start_date AND n.expire_date
                    THEN 1 ELSE 0 END), 0) AS full
FROM salesnumbers;

问题可能出在您的日期间隔上。尝试使用 CURRENT DATE 而不是 CURDATE()。此外,您可以直接在 DB2 中列出日期间隔 +/- 一些数量。

SELECT
    COUNT(CASE WHEN CURRENT DATE BETWEEN n.start_date AND n.expire_date
               THEN 1 END) AS current,
    COUNT(CASE WHEN CURRENT DATE -  1 YEAR BETWEEN n.start_date AND n.expire_date
               THEN 1 END) AS prior,
    COUNT(CASE WHEN DATE('2018-12-31') - 7 DAY BETWEEN n.start_date AND n.expire_date
               THEN 1 END) AS full
FROM salesnumbers;

请注意,我用条件计数替换了您的条件总和。这使代码稍微更简洁,因为我们不必拼出明确的 ELSE 条件(默认为 NULL)。