1

我有一个包含日期的 DATE 列,但我需要查询它以查找不到 30 天的记录。

START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010

询问:

SELECT START_DATE
 WHERE START_DATE < 30;

我知道这是 ORACLE SQL 中的简单查询,但我做错了。

4

3 回答 3

7

利用:

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - 30
  • SYSDATE是 Oracle 获取当前日期和时间的语法
  • 在 Oracle 中,您可以在天的上下文中进行日期算术,因此 SYSDATE - 30 表示“当前日期,减去三十天”以获得过去三十天的日期

如果要根据午夜后的 30 天计算日期,请使用TRUNC 函数

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > TRUNC(SYSDATE) - 30

不要在列上运行 TRUNC - 这将使列上的索引无用,确保表扫描。

于 2010-11-03T20:01:56.060 回答
4
SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;

INTERVAL虽然我注意到INTERVALOracle 和 PostgreSQL 之间的语法略有不同,但它比假设您可以增加或减少天数更具可移植性。

于 2010-11-03T20:04:49.380 回答
-1

WHERE START_DATE > SYSDATE - 1

也许

哪里 TRIM(STARTDATE) > TRIM(SYSDATE) - 1

于 2010-11-03T20:02:33.990 回答