针对日期列的Oracle SQL Where子句

时间:2010-11-03 19:59:59

标签: sql oracle oracle10g oracle9i date-arithmetic

我有一个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中查询很简单,但我做错了。

3 个答案:

答案 0 :(得分:7)

使用:

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

如果您想根据截至午夜的30天评估日期,请使用TRUNC function

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

不要在列上运行TRUNC - 这会使列上的索引无效,从而确保表扫描。

答案 1 :(得分:3)

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;

INTERVAL比假设您可以添加或减去天数更容易,但我注意到Oracle和PostgreSQL之间的INTERVAL语法略有不同。

答案 2 :(得分:-1)

START_DATE&gt; SYSDATE - 1

或者

TRIM(STARTDATE)&gt; TRIM(SYSDATE) - 1