Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с типом INTERVAL [D7, FIREBIRD]


Деня ©   (2006-09-12 20:18:00) 

Мастера, подскажите такую вещугу :

каким образом отнять интервал времени (например, 30 минут)
от даты/ времени в SQL (FIBPLUS + FIREBIRD) .  
Вопрос банальный, но что-то не выходит

Должно быть что-то типа (там) :

X.DATETIME_ - INTERVAL '00:30:00'

P.S. После INTERVAL еще пишется MINUTE TO SECOND или что-то вроде того

СПАСИБО ВСЕМ ЗА БУДУЩИЕ ВАШИ ПОДСКАЗКИ !


Johnmen   (2006-09-13 16:06:00) [1]

И ещё http://sql.ru/forum/actualthread.aspx?tid=135087


Johnmen   (2006-09-13 16:04:00) [2]


> atruhin ©   (13.09.06 15:22) [8]
> > [7] Johnmen ©   (13.09.06 14:51)
> Неправильно, проверял.


Я разве что-то говорил про TIMESTAMP? Вроде бы нет...:)


Деня   (2006-09-13 15:33:00) [3]

Мужики, спасибо!

Дам свои комменты. Кому-то , может, пригодится.


>  TIME единицей считает 1 секунду


Вообще-то да, но лучше явно преобразовать
cast('X:XX' as time)  

> Смотри статью - "Mathmatical operations on Time and Timestamp
> data"
> на сайте Борланда

Хорошая статья, идеальная для таких случаев
http://bdn.borland.com/article/28886


> DataSet.FieldByName('DTDIF').AsDateTime :=
>  DataSet.FieldByName('DT').AsDateTime - StrToDateTime('00:
> 30:00');
> DTDIF  вычисляемое поле,
> DT - поле типа TIMESTAMP
> <Цитата>

Такого рода программное преобразование очень удобно делать с технологиями типа BDE, в которые значения типа DATETIME заносятся только через параметры. ( или, может, у кого-то получилось дату загнать прямо в строку-SQL ? Если так, то, пожалуйста, кусок кода )

Т.е.  

stringSQL := '... WHERE DATETIME_ = :MYDATETIME';

MyDateTime := [datetime] + StrToDateTime('00:30:00'); // вычисляем

X.ParamByName('MYDATETIME').AsDateTime := MyDateTime;

У меня другая ситуация, но за совет спасибо.

А с типом INTERVAL у меня в FIREBIRD чего-то не заладилось :{
Сделал через CAST()


atruhin   (2006-09-13 15:22:00) [4]

> [7] Johnmen ©   (13.09.06 14:51)

Неправильно, проверял.
Subtract or Add a time from/to a timestamp.

How:Subtract the time from midnight, divide the result by the number of seconds in a day, take that result and add or substract it from your timestamp.

Example: This example shows what time it will be 2 hours from now.

select current_timestamp+(cast('2:00' as time)-cast('0:00' as time))/(60*60*24) from rdb$database;


Johnmen   (2006-09-13 14:51:00) [5]

<DATETIME type field/variable> - 30*(1/24/60)


atruhin   (2006-09-13 14:41:00) [6]

Насколько я понял автору нужны операции с датой временем на сервере.


Виталий Панасенко   (2006-09-13 12:22:00) [7]

DataSet.FieldByName('DTDIF').AsDateTime :=
 DataSet.FieldByName('DT').AsDateTime - StrToDateTime('00:30:00');
DTDIF  вычисляемое поле,
DT - поле типа TIMESTAMP


atruhin   (2006-09-13 07:15:00) [8]

Смотри статью - "Mathmatical operations on Time and Timestamp data"
на сайте Борланда


kaif   (2006-09-12 23:38:00) [9]

А я вот замечал, что IB при работе с типом TIME единицей считает 1 секунду (в SQL-запросе)
Точно не помню - редко работаю с этим типом данных.


Деня   (2006-09-12 23:01:00) [10]

А конкретнее ?


> 1/24/60 суток


Такой маской задается интервал дат.
Если можно так задавать время, то какие использовать спецификаторы ?


Desdechado   (2006-09-12 21:26:00) [11]

1 мин = 1/24/60 суток


Наверх

Титульная страница Поиск, карта сайта Написать письмо