我现在正在支持由其他人开发的报告。 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
答案 0 :(得分:3)
ADD_MONTHS(date - EXTRACT(day FROM date) + 1,-1)
返回上个月的第一天,效率稍高的版本为ADD_MONTHS(date - (EXTRACT(day FROM date) - 1),-1)
(rd.system_ci_date - rd.ci_date) DAY(4)
返回INTERVAL中两个日期之间的差异(如果中间的日期超过9999天,则会失败)。它与返回INT的rd.system_ci_date - rd.ci_date
相同。
也许将其重写为
and rd.system_ci_date >= ADD_MONTHS(date - (EXTRACT(day FROM date) -1) ,-1)
and rd.system_ci_date > rd.ci_date + 1
有点容易理解
答案 1 :(得分:0)
rd.system_ci_date 是今天的日期
ADD_MONTHS(date - EXTRACT(day FROM date) + 1,-1)
将返回上个月的第一天。
(rd.system_ci_date - rd.ci_date) DAY(4) > 1
给出了差异。
DAY(4)
定义了9999天