Oracle - выбранные записи между двумя датами (включительно) при конвертации из строки даты - PullRequest
2 голосов
/ 12 сентября 2011

У меня следующий запрос Oracle

SELECT *
FROM table 
WHERE date_opened 
BETWEEN ((TO_DATE('2011-08-01', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) 
AND ((TO_DATE('2011-08-31', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400))

это почти работает, но не включает записи дат, датированные 2011-08-31. Есть идеи? Вероятно, это как-то связано с тем, как я конвертирую свои строки дат ...

ОБНОВЛЕНИЕ : Я действительно должен был сказать, что дата на самом деле является меткой времени UNIX. Вот почему я использую 86400 и 01-JAN-1970

Спасибо:)

Ответы [ 2 ]

5 голосов
/ 12 сентября 2011

Если верхняя граница интервала не включена в ваши результаты, то, скорее всего, вы создаете «эксклюзивный» фильтр по отношению к верхней границе.Так что просто добавьте один день к верхней границе.Т.е.

AND ((TO_DATE(...) - to_date(...) + 1) * (86400)) - 1

В Oracle +1 добавит один день при использовании в арифметике даты и времени.

Примечание: BETWEEN .. AND создает включающий фильтр, как сказал Олли, но ваша арифметикаможет изменить это поведение, преобразовав вещи в секунды

3 голосов
/ 12 сентября 2011

Вы не включили ничего, что произошло после полуночи последнего дня.

try:

AND ((TO_DATE('2011-09-01', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400) - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...