Диапазон оракулов

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

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

как я могу

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

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

Ответ 1

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

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

Это 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'

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