SQL从已声明日期的“上个月”中提取值
我使用的是Oracle11,我需要显示上个月的订单,每个订单的日期都已经设置好了 表格如下: 名称:门店订单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月没有输入值。所以让我们忽略这一点 如何编写一个代码,从用户输入的日期中获取最后一个
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?