表达解释

Expression explanation

我现在支持由其他人开发的报告。 WHERE 子句包含以下 2 个语句。我不明白每个人的作用以及每个人的各个部分的作用。如果能帮助理解这些陈述,我们将不胜感激。谢谢

and rd.system_ci_date >= ADD_MONTHS(date - EXTRACT(day FROM date) + 1,-1)
and  (rd.system_ci_date - rd.ci_date) DAY(4) > 1

ADD_MONTHS(date - EXTRACT(day FROM date) + 1,-1) returns 上个月的第一天,效率稍微高一点的版本是 ADD_MONTHS(date - (EXTRACT(day FROM date) - 1),-1)

(rd.system_ci_date - rd.ci_date) DAY(4) returns INTERVAL 中两个日期之间的差异(如果间隔超过 9999 天,将失败)。它与 rd.system_ci_date - rd.ci_date 相同,其中 returns 一个 INT。

也许重写为

and rd.system_ci_date >= ADD_MONTHS(date - (EXTRACT(day FROM date) -1) ,-1)
and rd.system_ci_date > rd.ci_date + 1

比较容易理解

rd.system_ci_date是今天的日期

ADD_MONTHS(date - EXTRACT(day FROM date) + 1,-1) 即 return 上个月的第一天。

(rd.system_ci_date - rd.ci_date) DAY(4) > 1 这给出了区别。

DAY(4) 定义 9999 天