【问题标题】:Date comparison in Oracle 11gOracle 11g 中的日期比较
【发布时间】:2012-02-01 03:20:15
【问题描述】:

我是 Oracle 11g 的新手,我有一个关于查询的问题。

我有一个表dummy,其中有created_date 类型为Date 的列。

我想要一个查询,它将返回 created_date + 7 days 小于今天日期的所有记录。

Oracle 11g 中的哪种查询类型可以完成此操作?

【问题讨论】:

  • 我认为你很幸运能得到这些好的答案。您至少应该尝试查询 - 或阅读一些有关 sql 的信息,因为这是非常基本的内容。

标签: oracle oracle11g date-arithmetic


【解决方案1】:

Oracle 允许您使用 + 进行日期运算,所以

where table.created_date >= sysdate
and table.created_date < sysdate + 7

将查找正好现在和正好现在加上 7 天之间的行。

如果不想包含时间组件,可以使用trunc()函数

where trunc(table.created_date) >= trunc(sysdate)
and trunc(table.created_date) < trunc(sysdate) + 7

【讨论】:

  • 谢谢!我可以简单地使用“where creation_date + 7 = sysdate AND created_date
  • 如果您只检查creation_date + 7 &lt; sysdate,您将获得与之匹配的每条记录——一直追溯到数据库中最早的记录。 如果那是你真正想要的,那么这肯定是一个有效的查询
【解决方案2】:

我认为 rejj 的解决方案将为您提供从现在到未来 7 天的记录。根据您的描述,您可能想要过去 7 天内的这些记录。我会这样做:

WHERE created_date <= SYSDATE
  AND created_date >= SYSDATE - 7

这可能更清楚,并且是等效的:

WHERE created_date BETWEEN SYSDATE AND (SYSDATE - 7)

请注意,使用 TRUNC() 将导致优化器绕过您在 created_date 上拥有的任何索引,除非您定义了功能索引。

【讨论】:

    【解决方案3】:

    使用 INTERVAL 常量可以使日期算术更清晰,如

    SELECT *
      FROM DUMMY
      WHERE CREATED_DATE >= TRUNC(SYSDATE) - INTERVAL '7' DAY
    

    分享和享受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多