[英]Oracle SQL Where Clause against a date column
I have a DATE column with a date in it but I need to query it to find records less than 30 days old. 我有一个带有日期的DATE列,但我需要查询它以查找少于30天的记录。
START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010
Query: 查询:
SELECT START_DATE
WHERE START_DATE < 30;
I know it is simple Query in ORACLE SQL but i am doing something wrong. 我知道这是ORACLE SQL中的简单查询,但我做错了什么。
Use: 采用:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - 30
SYSDATE
is Oracle's syntax to get the current date and time SYSDATE
是Oracle的语法,用于获取当前日期和时间 If you want to evaluate the date based on thirty days as of midnight, use the TRUNC function : 如果要基于截至午夜的30天评估日期,请使用TRUNC函数 :
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > TRUNC(SYSDATE) - 30
Don't run TRUNC on the column - that will render an index on the column useless, ensuring a table scan. 不要在列上运行TRUNC-这将使列上的索引无用,从而确保表扫描。
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;
INTERVAL
is more portable than assuming that you can add or subtract days, although I've noticed some slight differences in the INTERVAL
syntax between Oracle and PostgreSQL. INTERVAL
比假定你可以加上或减去天,虽然我已经注意到了一些细微的差别更便携的INTERVAL
Oracle和PostgreSQL之间的语法。
WHERE START_DATE > SYSDATE - 1 START_DATE> SYSDATE-1
or perhaps 也许
WHERE TRIM(STARTDATE) > TRIM(SYSDATE) - 1 TRIM(STARTDATE)> TRIM(SYSDATE)-1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.