表达解释

时间:2016-02-15 14:49:21

标签: sql expression teradata

我现在正在支持由其他人开发的报告。 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

2 个答案:

答案 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天