简体   繁体   English

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

[英]DB2 use of labeled duration not valid with multiple date intervals

I'm trying to refactor a MySQL query to run on DB2/iSeries and I'm getting the error Use of labeled duration not valid. 我试图重构一个在DB2 / iSeries上运行的MySQL查询,并且出现错误,使用带标签的持续时间无效。

Looking at the documentation I feel like the usage below should be working. 查看文档,我觉得下面的用法应该可以使用。

Am I missing something? 我想念什么吗?

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;

The issue is likely your date intervals. 问题可能出在您的日期间隔上。 Try using CURRENT DATE instead of CURDATE() . 尝试使用CURRENT DATE而不是CURDATE() Also, you may list date intervals +/- some amount directly in DB2. 另外,您可以直接在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;

Note that I replaced your conditional sums with conditional counts. 请注意,我用条件计数替换了您的条件和。 This leaves the code slightly more terse, because we don't have to spell out an explicit ELSE condition (the default being NULL ). 这使代码更加简洁,因为我们不必拼出明确的ELSE条件(默认为NULL )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM