用于过滤30天以上记录的SQL

时间:2014-01-03 17:27:30

标签: sql oracle

假设我有以下查询:

select customer_name, origination_date
where origination_date < '01-DEC-2013';

我想选择发件日期超过30天的所有客户。有没有一种方法在SQL(oracle,如果需要特定的东西)中以更动态的方式指定它而不是手动输入日期,这样我每次运行时都不需要更新查询?

谢谢!

2 个答案:

答案 0 :(得分:3)

当然可以尝试这样的事情:

select customer_name, origination_date where 
origination_date >= DATEADD(day, -30, GETUTCDATE());

这基本上表示origination_date从现在开始大于或等于30天。这适用于Microsoft SQL,但不确定,但Oracle上可能存在类似的功能。

答案 1 :(得分:2)

在Oracle中,当您减去日期时,默认情况下会得到天数差异,例如

select * from my_table where (date_1 - date_2) > 30

应返回日期差异大于30天的记录。 要使查询动态化,请对其进行参数化,因此不使用硬编码日期值,而是使用:

select * from my_table where (:date_1 - :date_2) > :threshold 

如果您正在使用oracle sql developer运行此类查询,它将弹出一个窗口供您指定paramteres的值;以冒号开头的那些。