Oracle SQL Where Clause против столбца даты - PullRequest
1 голос
/ 03 ноября 2010

У меня есть столбец 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, но я делаю что-то не так.

Ответы [ 3 ]

7 голосов
/ 03 ноября 2010

Использование:

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - 30
  • SYSDATE - это синтаксис Oracle для получения текущей даты и времени
  • В Oracle вы можете выполнять арифметику дат в контексте дней,поэтому SYSDATE - 30 означает «текущая дата, вычтите тридцать дней», чтобы получить дату, которая в прошлом была тридцатью днями

Если вы хотите оценить дату на основе тридцати дней с полуночи, используйте Функция TRUNC :

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > TRUNC(SYSDATE) - 30

Не запускать TRUNC для столбца - это сделает индекс для столбца бесполезным, обеспечивая сканирование таблицы.

3 голосов
/ 03 ноября 2010
SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;

INTERVAL является более переносимым, чем предполагать, что вы можете добавлять или вычитать дни, хотя я заметил некоторые небольшие различия в синтаксисе INTERVAL между Oracle и PostgreSQL.

0 голосов
/ 03 ноября 2010

ГДЕ START_DATE> SYSDATE - 1

или возможно

ГДЕ TRIM (STARTDATE)> TRIM (SYSDATE) - 1

...