SQL Query从过去30天获取数据?

mir*_*cle 36 oracle datetime

嗨,我是Oracle新手.如何进行简单的声明,例如从最近30天或20天的购买日期获取产品ID?

SELECT productid FROM product
WHERE purchase_date ? 
Run Code Online (Sandbox Code Playgroud)

小智 64

SELECT productid FROM product WHERE purchase_date > sysdate-30
Run Code Online (Sandbox Code Playgroud)


Raj*_*thi 12

最简单的方法是指定

SELECT productid FROM product其中purchase_date> sysdate-30;

请记住,上面的sysdate具有时间组件,因此它将是基于现在时间的03-06-2011 8:54 AM之前的订单.

如果你想比较时删除时间组件..

SELECT productid FROM product where purchase_date > trunc(sysdate-30);
Run Code Online (Sandbox Code Playgroud)

并且(根据您的评论),如果要指定特定日期,请确保使用to_date而不依赖于默认会话参数.

SELECT productid FROM product其中purchase_date> to_date('03/06/2011','mm/dd/yyyy')

并且考虑到(sysdate-30) - (sysdate)注释,对于订单,你应该只使用sysdate条件,除非你将来可以订购order_dates.


Gab*_*ona 7

在执行"purchase_date>(sysdate-30)"时要注意一个方面:"sysdate"是当前日期,小时,分钟和秒.所以"sysdate-30"并不完全是"30天前",而是"30天前的确切时间".

如果您的购买日期为00.00.00小时,分钟,秒,则更好:

where trunc(purchase_date)>trunc(sysdate-30)
Run Code Online (Sandbox Code Playgroud)

(这不需要考虑小时,分钟和秒).

  • "其中purchase_date> trunc(sysdate-30)"也可以使用索引(如果存在索引)(而您的表达式难以优化). (3认同)