针对日期列的Oracle SQL Where子句

anw*_*rma 1 sql oracle oracle10g oracle9i date-arithmetic

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

START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT START_DATE
 WHERE START_DATE < 30;
Run Code Online (Sandbox Code Playgroud)

我知道在ORACLE SQL中查询很简单,但我做错了.

OMG*_*ies 7

使用:

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - 30
Run Code Online (Sandbox Code Playgroud)
  • SYSDATE 是Oracle获取当前日期和时间的语法
  • 在Oracle中,您可以在几天的上下文中进行日期算术,因此SYSDATE - 30表示"当前日期,减去30天"以获得过去30天的日期

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

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > TRUNC(SYSDATE) - 30
Run Code Online (Sandbox Code Playgroud)

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