【问题标题】:SQL to filter for records more than 30 days oldSQL 过滤超过 30 天的记录
【发布时间】:2014-01-04 01:39:18
【问题描述】:

假设我有以下查询:

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

我想选择所有发起日期超过 30 天的客户。 SQL(oracle,如果需要具体说明)中是否有一种方法可以比手动输入日期更动态地指定它,这样我每次运行时都不需要更新查询?

谢谢!

【问题讨论】:

标签: sql oracle


【解决方案1】:

当然可以试试这样的:

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

这基本上说明了 origination_date 从现在起大于或等于 30 天的位置。这在 Microsoft SQL 中有效,不确定但 Oracle 上可能有类似的功能。

【讨论】:

    【解决方案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 运行这样的查询,它将弹出一个窗口供您指定参数的值;以冒号开头的那些。

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      相关资源
      最近更新 更多