SQL从已声明日期的“上个月”中提取值

SQL从已声明日期的“上个月”中提取值,sql,oracle,Sql,Oracle,我使用的是Oracle11,我需要显示上个月的订单,每个订单的日期都已经设置好了 表格如下: 名称:门店订单 OrderNo OrderDate ------- ---------- ST1 03-MAY-12 ST2 03-APR-13 ST3 15-APR-13 因此,理想情况下,它应该返回ST2和ST3,因为它们都是2013年4月,但现在我们已经进入6月3日,2013年5月没有输入值。所以让我们忽略这一点 如何编写一个代码,从用户输入的日期中获取最后一个

我使用的是Oracle11,我需要显示上个月的订单,每个订单的日期都已经设置好了

表格如下: 名称:门店订单

OrderNo  OrderDate
-------  ----------
ST1      03-MAY-12
ST2      03-APR-13
ST3      15-APR-13
因此,理想情况下,它应该返回ST2和ST3,因为它们都是2013年4月,但现在我们已经进入6月3日,2013年5月没有输入值。所以让我们忽略这一点

如何编写一个代码,从用户输入的日期中获取最后一个月的日期?

使用@Grisha的答案

select * 
from orders
where to_char(OrderDate,'MM') = to_char(add_months(sysdate,-1),'MM')

这应该能够很好地使用索引,因为它不会按顺序对行进行每行计算

将cte设置为从订单中选择MAXOrderDate orderdate 从订单o、cte中选择* 其中o.OrderDate>=truncte.OrderDate,'MM' 和o.OrderDate<最后一天cte.OrderDate+1
这允许您在orderdate上使用索引

select *
from   orders
where  orderdate >= add_months(trunc(sysdate,'MM')-1) and 
       orderdate <  trunc(sysdate,'MM')

我是否误解了这个问题?它似乎只返回ST1,而不是ST2和ST3…?:我想你的意思是加上一个月的TruncSysDate,'MM',-1?