использование интервалов

Alexandre

PHPПенсионер
использование интервалов

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

можно как-то использовать интервалы. В документации я не нашел функций типа adddate

тип поля даты DT - datatime
 

Alexandre

PHPПенсионер
нашел уже... пол часа копался...
Код:
select * from events where ( event_date between  now()::date  and now()::date  - integer '7')
-~{}~ 24.10.05 11:28:

еще вопрос в тему,
мне нужно определить интервал, например с 10.10 по 15.10

Можно это сделать с использованием типа интервал (и как это сделать), или по старинке определять поля : dt_beg, dt_end
 

svetasmirnova

маленький монстрик
Мне лень проверять как это сделать "с использованием типа интервал". А чем простая арифметика с датами не устраивает:
date '2005-10-10' - date '2005-10-15' ?
 

BOJIK

Новичок
Автор оригинала: svetasmirnova
Мне лень проверять как это сделать "с использованием типа интервал". А чем простая арифметика с датами не устраивает:
date '2005-10-10' - date '2005-10-15' ?
Вообще-то определяется это так
'5 day'::interval;

Вот сооветственно пример:

SELECT * FROM stats.sales WHERE creation_date between now()::date and now()::date - '7 day'::interval;

Так мне кажеться намного понятней.
 

svetasmirnova

маленький монстрик
BOJIK
Так ему вроде теперь надо разницу между датами установить. С интервалом он разобрался, нет?
 

BOJIK

Новичок
Автор оригинала: svetasmirnova
BOJIK
Так ему вроде теперь надо разницу между датами установить. С интервалом он разобрался, нет?
Просто в этом куске now()::date - integer '7' интервала как типа данных нет и
SELECT date '2005-10-15' - date '2005-10-10';
тоже дает не interval, а int. Если автору вопроса этого достаточно то будем считать что разобрался.
 

Alexandre

PHPПенсионер
вообще-то хочется хранить все в одном поле, если есть такая возможность.

Света, твой вариант date '2005-10-10' - date '2005-10-15' - это надо хранить два поля.

-~{}~ 24.10.05 17:34:

получается, что я должен хранить dt_beg + interval
правильно?
 

BOJIK

Новичок
получается, что я должен хранить dt_beg + interval


Если инервал не менеятся то зачем его хранить? Если меняется то делаешь поле интервального типа и храни его наздоровье. ИМХО для некоторых задач интервалы удобней и самое главное логичней чем два поля дата начала и дата окончания. В твоем случае при изменении даты начала не будет необходимости менять вторую дату.
 

Alexandre

PHPПенсионер
я храню расписание, т.е. некоторое событие (описание ) и его продолжительность ( дт начала и конца) . Пока БД на этапе создания, я хочу определить наиболее оптимальную структуру. Т.к я не имел опыта работы с интервалами, я решил обратить на них внимание, применимо ли это в данном случае.

Как быстрее будет в этом случае выборка событий (по отношению dt_beg, dt_end), попадающих в заданный интервал.
 

BOJIK

Новичок
Судя по заданию, при выборке ты будешь задавать дату начала (и эта дата может быть как в прошлом так и в будущем) и дату окончания.

Если одно из полей будет интервального типа, то вторую дату нужно будет все равно при выборке вычислять.

Так что ИМХО для данной задачи лучше хранить дату начала и дату окончания события (это вопрос удобства написания запросов).

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