0

我正在使用 oracle 11,我需要显示上个月的“订单”,其中每个订单的日期已经设置。

表是:
名称:商店订单

OrderNo  OrderDate
-------  ----------
ST1      03-MAY-12
ST2      03-APR-13
ST3      15-APR-13

所以理想情况下,它应该返回的是 ST2 和 ST3,因为它们都是 2013 年 4 月,但是现在我们是 6 月的 3 天,并且没有输入 2013 年 5 月的值。所以让我们忽略它。

我将如何编写一个从用户输入的日期中获取“上个月”的代码?

4

3 回答 3

1

使用@Grisha 的回答

select * 
from orders
where to_char(OrderDate,'MM') = to_char(add_months(sysdate,-1),'MM')
于 2013-06-03T06:22:50.170 回答
0

这应该能够很好地使用索引,因为它不会对订单中的行进行每行计算;

WITH cte AS ( SELECT MAX(OrderDate) orderdate FROM orders )
SELECT * FROM orders o, cte
WHERE o.OrderDate >= TRUNC(cte.orderdate,'MM') 
  AND o.OrderDate < LAST_DAY(cte.orderdate)+1

一个用于测试的 SQLfiddle

于 2013-06-03T06:35:42.187 回答
0

这允许您在 orderdate 上使用索引。

select *
from   orders
where  orderdate >= add_months(trunc(sysdate,'MM')-1) and 
       orderdate <  trunc(sysdate,'MM')
于 2013-06-03T06:54:12.140 回答