Сравнение дат в Oracle 11g - PullRequest
       25

Сравнение дат в Oracle 11g

0 голосов
/ 03 января 2012

Я новичок в Oracle 11g, и у меня есть вопрос по поводу запроса.

У меня есть таблица dummy, в которой есть created_date столбец типа Date.

Мне нужен запрос, который вернет все записи, где created_date + 7 дней меньшечем сегодняшняя дата.

Какой тип запроса в Oracle 11g выполняет это?

Ответы [ 3 ]

4 голосов
/ 03 января 2012

Я думаю, что решение rejj даст вам записи в промежутке между настоящим и семью днями в будущем. Из вашего описания звучит так, будто вы, вероятно, хотите эти записи в течение последних семи дней. Я бы сделал это как:

WHERE created_date <= SYSDATE
  AND created_date >= SYSDATE - 7

Это может быть более понятно и эквивалентно:

WHERE created_date BETWEEN SYSDATE AND (SYSDATE - 7)

Имейте в виду, что использование TRUNC () приведет к тому, что оптимизатор будет обходить любые индексы, которые вы создали на create_date, если только у вас не определен функциональный индекс.

4 голосов
/ 03 января 2012

Oracle позволяет вам использовать + для арифметики дат, поэтому

where table.created_date >= sysdate
and table.created_date < sysdate + 7

найдет строки между точным и настоящим моментом плюс 7 дней.

Если вы не хотитевключить компонент времени, вы можете использовать функцию trunc()

where trunc(table.created_date) >= trunc(sysdate)
and trunc(table.created_date) < trunc(sysdate) + 7
0 голосов
/ 03 января 2012

Использование констант INTERVAL может сделать арифметику даты более ясной, как в

SELECT *
  FROM DUMMY
  WHERE CREATED_DATE >= TRUNC(SYSDATE) - INTERVAL '7' DAY

Делитесь и наслаждайтесь.

...