我有一个包含日期的 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 中的简单查询,但我做错了。
我有一个包含日期的 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 中的简单查询,但我做错了。
利用:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - 30
SYSDATE
是 Oracle 获取当前日期和时间的语法如果要根据午夜后的 30 天计算日期,请使用TRUNC 函数:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > TRUNC(SYSDATE) - 30
不要在列上运行 TRUNC - 这将使列上的索引无用,确保表扫描。
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;
INTERVAL
虽然我注意到INTERVAL
Oracle 和 PostgreSQL 之间的语法略有不同,但它比假设您可以增加或减少天数更具可移植性。
WHERE START_DATE > SYSDATE - 1
也许
哪里 TRIM(STARTDATE) > TRIM(SYSDATE) - 1