需要通过查询验证日期范围条件

时间:2018-12-24 08:39:09

标签: sql oracle

我的类别表中有2个跨度,每个跨度覆盖十月的一半跨度。如果完成了整个十月的入学登记,则应确认Cateoryspans涵盖了整个十月的入学登记时间。

CATEGORY:
beginDT             EndDt
01-sep-2018        16-oct-2018
17-sep-2018        31-Dec-2018

MEMBER Enroll:
BeginDt           EndDt
01-sep-2018      31-oct-2018

当我要考虑十月份的会员注册时。需要查询以确认CATEGORY表范围中是否涵盖了整个十月。

1 个答案:

答案 0 :(得分:1)

在当前的桌子设计上很难调整。我建议改为维护一个日历表,该表要验证的值显示在类别表中。在这种情况下,请考虑内联的下表:

WITH calendar AS (
    SELECT date '2018-10-01' AS dt FROM dual UNION ALL
    SELECT date '2018-10-02' FROM dual UNION ALL
    SELECT date '2018-10-03' FROM dual UNION ALL
    ...
    SELECT date '2018-10-31' FROM dual
)

然后,我们可以简单地将此日历表加入类别表,以标记10月中未涵盖的任何日期:

SELECT
    c.dt
FROM calendar c
LEFT JOIN category cat
    ON c.dt BETWEEN CAT.beginDT AND cat.EndDt
WHERE
    cat.beginDT IS NULL;

根据所需的确切输出,我们可以对上述查询进行重新处理。但希望很明显,使用日历表报告所需的内容要容易得多。