диапазон дат оракула - PullRequest
       8

диапазон дат оракула

11 голосов
/ 11 января 2010

с использованием Oracle 10g db У меня есть таблица примерно такая:

 create table x(
 ID NUMBER(10) primary key,
 wedding DATE NOT NULL
 );

как я могу

 select * from x where wedding is in june 2008???

Я знаю, что это, вероятно, легко, но я не мог найти никакого удовлетворительного ответа до сих пор. Помощь очень ценится.

Ответы [ 2 ]

21 голосов
/ 11 января 2010

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

SELECT *
  FROM x
 WHERE x.wedding BETWEEN TO_DATE('2008-JUN-01', 'YYYY-MON-DD') 
                            AND TO_DATE('2008-JUL-01', 'YYYY-MON-DD')

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

TO_DATE('2008-JUN-30', 'YYYY-MON-DD') + 1 - (1/(24*60*60))

Это должно прибавить один день к 30 июня 2008 года, а затем вычесть одну секунду, чтобы вернуть окончательную дату 30-Jun-2008 23:59.

Ссылки:

2 голосов
/ 11 января 2010

Это ANSI SQL и поддерживается oracle начиная с версии 9i

SELECT *
FROM   x
WHERE  EXTRACT(YEAR  FROM wedding) = 2008
AND    EXTRACT(MONTH FROM wedding) =   06

Классическое решение с определенным оракулом TO_CHAR():

SELECT *
FROM   x
WHERE  TO_CHAR(wedding, 'YYYY-MMM') = '2008-JUN'

(последнее решение было поддержано, когда динозавры все еще ходили по земле)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...