简体   繁体   English

Oracle SQL Where条款对日期列

[英]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的语法,用于获取当前日期和时间
  • In Oracle, you can do date arithmetic in the context of days, so SYSDATE - 30 means "current date, subtract thirty days" to get a date that is thirty days in the past 在Oracle中,您可以在天的上下文中进行日期算术,因此SYSDATE-30表示“当前日期,减去三十天”以获取过去三十天的日期

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM