Как правильно построить запрос по дате?

mod
Дата: 10.08.2005 11:20:42
Ввожу в поле blocking_date дату в формате: dd.mm.yyyy hh24.mi.ss. Всё хорошо когда надо выводить и дату и время... Однако при печати отчёты генерируруются за день или за преиод. Когда ввожу "select ... Where blocking_date = to_date('27.06.05','dd.mm.yy');" , то данный запрос не возвращает ничего...
очень не хочется делать "...Where blocking_date >= to_date('27.06.05 0.0.0','dd.mm.yy hh24.mi.ss') and blocking_date <= to_date('27.06.05 23.59.59','dd.mm.yy hh24.mi.ss');" . Есть другие пути?
Vadim Zh
Дата: 10.08.2005 11:22:59
Если идет выборка по индексу, то желательно так делать.
если нет, то TRUNC(blocking_date) = to_date('27.06.05','dd.mm.yy')

С уважением, Вадим.
Владимор Конев
Дата: 10.08.2005 11:24:39
А чем не нравится такой вариант-то???
По-моему очень даже ничего... И если будут индексы по полю с датой, то их можно даже будет заюзать...
mod
Дата: 10.08.2005 13:14:03
Чем не нравится?
Дело в том что алгоритм приложения которое генерит этот запрос построено на if и плюсовании строки... Пришлось бы ещё if вводить... Вот поэтому-то и не нравится.
mod
Дата: 10.08.2005 13:15:50
Хотя вот насчёт индексов по полю с датой надо подумать.... счас у меня индексы по id(суррогатному ключу)
Sergey Balter
Дата: 10.08.2005 13:17:47
Можно построить функциональный индекс на Trunc(blocking_date), тогда запрос вида ... WHERE TRUNC(blocking_date) = to_date('27.06.05','dd.mm.yy') подхватит этот индекс.

Но я бы переделал генерацию WHERE-условий по дате в приложении
mod
Дата: 10.08.2005 14:25:34
уже переделал.... мне казалось что так не клёво... но раз народ говорит обратное...
SY
Дата: 10.08.2005 17:40:56
mod
очень не хочется делать "...Where blocking_date >= to_date('27.06.05 0.0.0','dd.mm.yy hh24.mi.ss') and blocking_date <= to_date('27.06.05 23.59.59','dd.mm.yy hh24.mi.ss');" . Есть другие пути?


Well, how about to "optimize" the above to:

blocking_date >= to_date('27.06.05','dd.mm.yy') and blocking_date < to_date('28.06.05','dd.mm.yy')

This way it is not much longer than

TRUNC(blocking_date) = to_date('27.06.05','dd.mm.yy')

and it will use index on blocking_date.

SY.