返回日期为2个月前的数据(使用Oracle SQL)

返回日期为2个月前的数据(使用Oracle SQL),sql,oracle,Sql,Oracle,我想知道是否有人能解决这个问题。 我试图返回员工的终止日期在2个月前的一个月内的结果,因此如果报告在10月份运行,我希望看到员工的终止日期在8月份 目前我能想出的最好办法是 其中月份(saw_4)=月份(SYSDATE)-2 但这对1月和2月的系统日期不起作用。 (另外,它似乎不想在Oracle OTBI上运行,所以我想我会在BI上运行) 感谢您的帮助 可能是这样的: where termination_date between trunc(add_months(sysdate, -2), 'm

我想知道是否有人能解决这个问题。 我试图返回员工的终止日期在2个月前的一个月内的结果,因此如果报告在10月份运行,我希望看到员工的终止日期在8月份

目前我能想出的最好办法是

其中月份(saw_4)=月份(SYSDATE)-2

但这对1月和2月的系统日期不起作用。 (另外,它似乎不想在Oracle OTBI上运行,所以我想我会在BI上运行)


感谢您的帮助

可能是这样的:

where termination_date between trunc(add_months(sysdate, -2), 'mm')
                           and last_day(add_months(sysdate, -2))

为什么,如果有更简单的

where to_char(termination_date, 'yyyymm') = to_char(add_months(sysdate, -2), 'yyyymm')

因为这将导致终止日期上可能的索引不可用(除非你有一个基于函数的索引,而人们通常没有)。我倾向于这样写:

where termination_date >= trunc(add_months(sysdate, -2), 'mm') and
      termination_date < trunc(add_months(sysdate, -1), 'mm') 
其中终止日期>=trunc(加上月份(sysdate,-2),“mm”)和
终止日期
大概,
终止日期
没有时间成分。但是,唉,在Oracle中,
date
数据类型总是有一个。因此,作为一种普遍的解决方案,这似乎更安全

where termination_date >= trunc(add_months(sysdate, -2), 'mm') and
      termination_date < trunc(add_months(sysdate, -1), 'mm')