Правильный диапазон дат в SQL - PullRequest
3 голосов
/ 29 июля 2011

Это немного параноидально, но я получаю набор записей, которые попадают в период времени, скажем, период с 1 января 2011 года (начиная с полуночи) до 31 марта 2011 года (всезаписи до 11:59:59 PM)

Я использую условие

t.logtime between to_date('2011-01-01', 'yyyy-mm-dd') and to_date('2011-03-31')

Обратите внимание, что logtime - это поле даты и времени.

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

1 Ответ

3 голосов
/ 29 июля 2011

Да, вы пропускаете почти весь последний день.Есть различные решения;Вероятно, самое простое:

t.logtime >= to_date('2011-01-01', 'yyyy-mm-dd')
and t.logtime < to_date('2011-04-01', 'yyyy-mm-dd')

Я бы тоже использовал буквальный синтаксис даты ANSI:

t.logtime >= date '2011-01-01'
and t.logtime < date '2011-04-01'

Другой способ:

trunc(t.logtime) between date '2011-01-01' and date '2011-03-31'

, но учтите, чтокоторый больше не может использовать индекс в журнале (хотя он может использовать индекс в trunc (лог)).

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