我有一个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中查询很简单,但我做错了。
答案 0 :(得分:7)
使用:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - 30
SYSDATE
是Oracle获取当前日期和时间的语法如果您想根据截至午夜的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