假设我有以下查询:
select customer_name, origination_date
where origination_date < '01-DEC-2013';
我想选择发件日期超过30天的所有客户。有没有一种方法在SQL(oracle,如果需要特定的东西)中以更动态的方式指定它而不是手动输入日期,这样我每次运行时都不需要更新查询?
谢谢!
答案 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的值;以冒号开头的那些。