powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сравнение дат (запрос)
4 сообщений из 4, страница 1 из 1
Сравнение дат (запрос)
    #32600196
zahodun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем. Возникла такая проблема: нужно составить хранимую процедуру, которая делала бы следующее: есть таблица, в которой клиенты оставляют некие свои идентификаторы и время изменения записи в соответствующм поле, тип TIMESTAMP (Win32,FB1.5, Dialect3). Так вот процедура должна перебрать все записи, выявить те, у которых разрыв (Now-TimeField) больше определенного, при выполнении условия делать чего-то (отслеживает не отвалилились ли клиенты). Вопрос только один как реализовать средствами sql (Now-TimeField)? На стороне клиента делал это так

while (!IBSQL1->Eof)
{
TDateTime TD = IBSQL1->FieldByName("RMO_TIME")->AsDateTime;
Double TD2 = Now() - TD;
if (TD2 > (CONNECT_DELAY * 1.15E-5)) // проверка тайм-аута (разница в с.)
{
//выполняю чего надо
}
....
IBSQL1->Next();
}

Теперь понадобилось перенести логику на сервер...

Первое, что приходит в голову, это получить количество секунд через
Extract (YEAR, MONTH .... FROM DATE_FIELD), но что-то уж слишком некрасиво получается, да и перемножать долго будет - нужна оперативность. В общем, может я чего-то упустил при работе с датой-временем - подскажите как это сделать красиво.
...
Рейтинг: 0 / 0
Сравнение дат (запрос)
    #32600247
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в SQL тоже вычисть из одного времени другое и получить разницу в секундах. Напиши:

SELECT * FROM TABLE1 WHERE TIME_FIELD<CURRENT_TIME-10000

Только учти что 'NOW' и CURRENT_TIMESTAMP - это не одно и то-же. Одно из них показывает время текущее, а другое время начала транзакции или что-то в этом роде. Не помню точно - может кто ещё подскажет.
...
Рейтинг: 0 / 0
Сравнение дат (запрос)
    #32600298
zahodun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Действительно работает :)
А время начала транзакции у меня практически совпадает с текущим, т.к. процедура выполняется в своей транзакции, которая специально для нее запускается.
...
Рейтинг: 0 / 0
Сравнение дат (запрос)
    #32600333
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Gold

Код: plaintext
1.
2.
The CURRENT_TIMESTAMP function returns a TIMESTAMP data type
value containing year, month, and, day for date 'today' and
hours, minutes, and seconds for time 'now'.

>zahodun

Сравнивать надо дату-время, иначе будут проблемы при наступлении новых суток...:)

Код: plaintext
TimeStampField>CURRENT_TIMESTAMP-<сколько секунд желаем?>* 1 . 0 / 86400 . 0 
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сравнение дат (запрос)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]